Python 3 中如何处理多个异常?

Cry*_*ore 0 python exception tkinter

我正在使用 Tkinter 创建一个计算器应用程序。我需要多种类型的异常语句,通过针对用户引起的不同异常的不同类型的输出来告知用户。

例如:

如果用户将数字除以零,则会出现除零错误。在这种情况下,我必须创建一个仅处理除零错误的异常语句。

同时,如果用户输入“100++2”而不是“100+2”等无效操作,则会出现无效语法错误。在这种情况下,我必须在同一个尝试中指定不同的异常语句,以不同的方式处理这种情况。

那么,如何做到这一点呢?

JPI*_*I93 6

可能值得查看错误和异常文档

简而言之,您可以使用从 Python 类派生的语法except ExceptionType:指定不同异常类型的行为 - 可以在此处找到内置 Python 异常的列表。ExceptionTypeExceptionException

需要注意的是,当在块Exception中引发an 时,Python 将以自上而下的方式执行与引发的第一个块try内的代码。因此,通常位于给定/链的底部,为可能引发的未指定异常提供默认行为,它不是第一个,因为任何引发都会触发此行为,从而使链中的其他语句变得毫无意义。ExceptExceptionexcept Exception:tryexceptExceptionExcept

例子

下面的例子说明了以上几点。

这里eval()仅用于演示目的,请在eval()考虑在自己的代码中使用它之前了解使用它的固有危险。

def demo(e):
    try:
        eval(e)
    except ZeroDivisionError as e:
        print("ZeroDivisionError caught")
        print(e)
    except IndexError as e:
        print("IndexError caught")
        print(e)
    except Exception as e:
        print("Other Exception caught")
        print(e)
    
examples = ["10/0", "[0,1,2][5]", "int('foo')"]

for e in examples:
    demo(e)
    print()
Run Code Online (Sandbox Code Playgroud)

输出

ZeroDivisionError caught
division by zero

IndexError caught
list index out of range

Other Exception caught
invalid literal for int() with base 10: 'foo'
Run Code Online (Sandbox Code Playgroud)