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