无法在Python中捕获ValueError异常

7

我正在开始学习Python,我编写了一个非常简单的代码来练习try/except。

以下是代码:

a = float(input('num1: '))
b = float(input('num2: '))

try:
      result = a / b
except ValueError as e:
      print ('error type: ', type (e))

print(result)

每当我将一个字母作为数字输入时,except中的内容可以正常输出,但代码却崩溃了。 ZeroDivisionErrorTypeError可以正常处理,但ValueError无法处理。
即使我将输入放在不同的try/except中,也仍然无法处理。
我该如何处理这个错误,在真实的应用程序中又该怎么办呢?

1
请展示堆栈跟踪。 - slackmart
1个回答

7
发生崩溃是在进入try块之前。如果您使用当前代码输入字母,它不会在except块中打印错误信息。
仅将输入部分放在单独的try块中无法捕获异常。你需要一个与发生错误所在的try相关的except块,例如:
try:
    a = float(input('num1: '))
    b = float(input('num2: '))
except ValueError as e:
    print ('Value Error')

try:
    result = a / b
except ZeroDivisionError as e:
    print ('Zero DivisionError')

print(result)

或者,您可以将输入和除法都放在try块内,并使用当前的报告进行catch处理:

try:
    a = float(input('num1: '))
    b = float(input('num2: '))
    result = a / b
except ValueError as e:
    print ('error type: ', type (e))

print(result)

编辑:请注意,如果其中任何一个出现错误,将会在后面造成更多的错误。您最好选择第二个选项,但将 print(result) 移至 try 块中。那是它唯一被定义的时间。


1
因为result从未被定义,所以在出现异常时,print(result)会导致崩溃。 - chepner
我尝试了第一个选项,但它没有起作用 - 这让我感到惊讶!我将测试第二个解决方案。谢谢。 - idnfsp
John Duran,我真的要感谢你!你的第二种方法解决了问题。 - idnfsp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接