无法在 Python 中捕获 ValueError

idn*_*fsp 2 python try-except valueerror

开始学习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)
Run Code Online (Sandbox Code Playgroud)

每当我输入一个字母作为数字时,除了打印工作,但代码崩溃。

ZeroDivisionError&TypeError正在工作,但ValueError不是。

我什至将输入放在单独的 try/except 中,但它仍然无法正常工作。

我如何在此处以及在实际应用中处理此错误?

Joh*_*ans 5

在您进入 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)
Run Code Online (Sandbox Code Playgroud)

或者,您可以将输入和除法全部放在 try 块中并捕获当前报告:

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

print(result)
Run Code Online (Sandbox Code Playgroud)

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

  • 如果发生异常,“print(result)”将会崩溃,因为“result”永远不会被定义。 (2认同)