python 3中的try/except问题语句

Fio*_*iel 1 python

您好,我是 Python 和学习基础知识的新手。我很想了解 Python 中的 try/except 语句,我想问一下我是否应该在下面提到的 try 块/部分中保留尽可能少的内容(请参阅以下代码正确工作),或者尽量在 try 块中保留/部分(请参阅以下代码在我输入任何字符串时无法正常工作,但在我输入浮点数/整数时它工作正常)。

所以,这两个场景几乎相同,但是当我输入一个字符串时,另一个代码(我保留最小代码)给了我一个错误。

为什么要这样做?在这种情况下,如果我想在 try/except 块中保留尽可能少的内容,我该怎么办?任何线索将不胜感激。我保留最少代码行的第二个代码的替代正确解决方案是什么?- 我应该对其进行哪些调整才能为我工作?请帮忙。

NameError: name 'fahr' is not defined
Run Code Online (Sandbox Code Playgroud)
***# Following Code Working Properly:***
inp = input('Enter Fahrenheit Temperature:')
try:
    fahr = float(inp)
    cel = (fahr - 32.0) * 5.0 / 9.0
    print(cel)
except:
    print('Please enter a number')
Run Code Online (Sandbox Code Playgroud)
***# Following Code Not Working Properly:***
inp = input('Enter Fahrenheit Temperature:')

try:
    fahr = float(inp)
except:
    print('Please enter a number')

fahr = float(inp) # Even if I comment it, it doesn't make any difference when it comes to entering float in an input but it raises red flag if I enter string.
cel = (fahr - 32.0) * 5.0 / 9.0
print(cel)
Run Code Online (Sandbox Code Playgroud)

小智 5

try 表达式中的 less 是可取的

输入try:块的代码最好只包含可能直接产生相关错误的位。这样,就可以更轻松地跟踪其来源,并且不会被任何周围的和可能是安全的代码分心。

这样做时,请考虑控制流

第一段代码正确运行,因为当第 4 行出现错误时,控制流直接跳转到except块,因此任何依赖于该fahr变量的语句都不会受到影响。但是,在第二个代码段中,如果引发错误并且控制流跳转到 except 块,则fahr变量不会被定义,使得依赖于它的后续语句引发NameError您所说的错误。一个更安全的方法是定义一个替代的、默认的fahr = 0,例如在except块中或使用一个else:块,如果块中没有出现错误,控制流就会跳转到那里try:

使您的错误处理具体化

始终尝试使您预期的错误可能在您的代码中显式提出。这是通过将错误组的基类放在except关键字之后和冒号之前。例如,

except ValueError:
Run Code Online (Sandbox Code Playgroud)