Python 调用“中定义的变量”;检查“类型”;剧本

Python 调用“中定义的变量”;检查“类型”;剧本,python,Python,我正在检查用户输入的字符串是否可以转换为浮点。我想将其构造为一个循环,其中提示用户输入一个有效值,如果该值成功转换为浮点值,则循环将中断。我还想在脚本的其他地方使用这个新的转换值,以便以后进行计算 dist_string = raw_input("Enter a distance in meters to use as a buffer: ") try: dist = float(dist_string) print dist except ValueError: #Pr

我正在检查用户输入的字符串是否可以转换为浮点。我想将其构造为一个循环,其中提示用户输入一个有效值,如果该值成功转换为浮点值,则循环将中断。我还想在脚本的其他地方使用这个新的转换值,以便以后进行计算

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'时,出现以下错误(我需要在其他地方使用此转换后的浮点值):

回溯(最近一次呼叫最后一次):
文件“F:\407\u Lab05\Script1.py”,第194行,在
打印(区)
NameError:未定义名称“dist”

有什么想法吗?

如果在
try
块中的
dist
赋值过程中引发异常(例如
dist\u string
无法解析为
float
),则不会创建
dist
)。如果试图引用不存在的变量,将引发
namererror

一个潜在的解决方案,尽管我不完全确定您试图对代码做什么,是在异常处理块中添加一个fallback子句,以防
dist
的初始声明不起作用。像这样:

try:
    ...
except ...:
    ...
    dist = None
根据评论编辑:

如果您试图获取输入直到其有效,则需要使用
while
循环,例如:

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

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

如果您使用的是python 3或更高版本,则必须使用
input()
而不是
raw\u input()
对于您的问题,您必须在try except之外创建一个变量,并使用empty初始化它,然后在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)

也许我误解了如何使用我自己的代码。。。我试图创建一个循环,在这个循环中,系统会提示用户输入一些可以转换为浮点值的内容,如果用户输入有效值,循环就会中断。我明白了。请给我一点时间更新我的答案,并请将其包括在你的问题中。这是可行的,但我对它的工作原理感到困惑——特别是,
while True
子句是如何工作的。该子句是否查找
ValueError==True
?为什么不像
那样编写,而ValueError==True
?我将尝试更新我的问题以进行解释,但我鼓励您查看Python文档,因为我有,但我感到困惑。我理解while循环的布尔性质,但我不理解的是什么计算结果为真;循环如何知道如果引发值错误(即异常),将退出。甚至,为什么我们需要一个
while True
子句,而不是只有原始语句和
else:break
语句。添加
dist=None
似乎是不必要的步骤。
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)