Can';在Python中捕获ValueError

Can';在Python中捕获ValueError,python,valueerror,try-except,Python,Valueerror,Try Except,我开始学习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中的打印都会工作,但代码会崩溃 ZeroDiv

我开始学习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中的打印都会工作,但代码会崩溃

ZeroDivisionError
TypeError
正在工作,但
ValueError
不工作

我甚至将输入放在单独的try/except中,但它仍然不起作用


在这里以及在真实的应用程序中,我如何处理此错误?

崩溃发生在您进入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块中,并使用当前报告进行捕获:

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

print(result)

编辑:请注意,如果其中任何一个出现错误,它将在以后导致进一步的错误。最好使用第二个选项,但将打印(结果)移动到try块中。这是唯一一次定义它。

请显示stacktrace。
打印(结果)
将在发生异常时崩溃,因为
结果
将永远不会被定义。我尝试了第一个选项,但它不起作用-这让我吃惊!我将测试第二个解决方案。谢谢约翰·杜兰,我真的很想谢谢你!用第二种方法解决问题。