详解 Python 中的异常处理
异常是指程序中的例外,违例情况。异常机制是指程序出现错误后,程序的处理⽅法。当出现错误后,程序的执⾏流程发⽣改变,程序的控制权转移到异常处理。
异常处理可以使开发⼈员能以优雅的⽅式处理错误。
11.1 try-except
Python 使⽤ try-except 语句处理异常。语法如下:
在 try 语句块中,我们写⼊可能会产⽣异常的代码,当异常发⽣时, try 语句块中的代码会被忽略,转⽽进⼊ except 语句块中处理异常。例如:
上述代码的执⾏流程如下:
- 先执⾏介于 try 和 except 之间的语句。
- 如果没有异常,则 except 语句块中的代码会被跳过。
- 如果⽂件不存在,则产⽣异常,在 try 语句块中的其他代码会被跳过。
- 当异常发⽣时,如果异常类型和 except 关键字后的异常名称匹配,就执⾏except 分⽀中的代码。上述代码中只能处理 IOError 异常,如要处理其他类型的异常,还需要添加更多的 except 分⽀。
11.2 多个 except
try 声明可以有多个 except 分⽀,它还可以选择 else 和 finally 分⽀。语法如下:
except 分⽀类似于 elif。当异常发⽣时,将检查 except 分⽀是否和异常类型匹配。如果匹配,就执⾏对应 except 分⽀中的代码。在最后⼀个 except 分⽀中,异常类型是被忽略了的。如果异常发⽣,但没有匹配到最后⼀个 except 之前的分⽀,则最后的
except 分⽀中的代码会被执⾏。如果没有任何异常发⽣,则执⾏ else 语句中的代码。finally 分⽀中的代码,⽆论是否有异常发⽣,都会被执⾏。
11.3 自定义异常
使⽤关键字 raise,可以在⽅法中⾃定义异常。语法为:
raise ExceptionClass("Your argument")
例如:
当⽤户输⼊的年龄⼩于 0 时,程序显⽰结果为:
有很多内置的异常类,表8-1描述了最重要的几个。在“Python库参考手册”的Built-inExceptions一节,可找到有关所有内置异常类的描述。这些异常类都可用于raise语句中。
11.4 捕获多个异常
如果要使用一个except子句捕获多种异常,可在一个元组中指定这些异常,如下所示:
try:
x = int(input('Enter the first number: '))
y = int(input('Enter the second number: '))
print(x / y)
except (ZeroDivisionError, TypeError, NameError):
print('Your numbers were bogus ...')
11.5 异常之禅
异常处理并不是很复杂。如果你知道代码可能引发某种异常,且不希望出现这种异常时程序终止并显示栈跟踪消息,可添加必要的try/except或try/finally语句(或结合使用)来处理它。
有时候,可使用条件语句来达成异常处理实现的目标,但这样编写出来的代码可能不那么自然,可读性也没那么高。另一方面,有些任务使用if/else完成时看似很自然,但实际上使用try/except来完成要好得多。
还没有评论,来说两句吧...