调用脚本中定义的变量"Check for Type"



我正在检查用户输入的字符串是否可以转换为浮点数。我想像循环一样构造它,提示用户输入有效值,如果值成功转换为浮点数,循环就会中断。我还想在脚本中的其他位置使用此新的转换值,以便稍后进行计算。

dist_string = raw_input("Enter a distance in meters to use as a buffer: ")
try:
dist = float(dist_string)
print dist
except ValueError:
#Prompt user to enter a number if they entered a string
dist_string = raw_input("Please enter an integer or float value: ")
print(dist)

当我尝试在函数外部调用"dist"时,会引发以下错误(我需要在其他地方使用此转换后的浮点值(:

Traceback (most recent call last):
File "F:407_Lab05Script1.py", line 194, in <module>
print(dist)
NameError: name 'dist' is not defined

有什么想法吗?

如果您使用的是python 3或更高版本,那么您必须使用input()而不是raw_input()对于您的问题,您必须在 try 之外创建一个变量,然后用空初始化它,稍后在 try 上更新它。 喜欢这个:

dist = None
dist_string = input("Enter a distance in meters to use as a buffer: ")
while True:   
try:
dist = float(dist_string)
print(dist)
break
except ValueError:
#Prompt user to enter a number if they entered a string
dist_string = input("Please enter an integer or float value: ")
continue
print(dist)

如果在分配try块中的dist期间引发异常(例如dist_string不能解析为float(,dist不会被创建。如果尝试引用不存在的变量,则会引发NameError

一个潜在的解决方案,虽然我不完全确定你想用你的代码做什么,是在你的异常处理块中添加一个回退子句,以防万一dist的初始声明不起作用。喜欢这个:

try:
...
except ...:
...
dist = None

根据评论编辑:

如果您尝试在输入有效之前接受输入,则需要使用while循环,如下所示:

while True:
dist_string = input(...)
try:
dist = float(dist_string)
except ...:
continue
else:
break

使用此构造将继续提示输入,直到可以正确分配dist值。

最新更新