错误和异常处理:try/except/else/finally用法大全
样例1:try/except
- 首先,执行 try 子句 (try 和 except 关键字之间的(多行)语句)。
- 如果没有异常发生,则跳过 except 子句 并完成 try 语句的执行。
- 如果在执行 try 子句时发生了异常,则跳过该子句中剩下的部分。
参考:try 语句的工作原理
(https://docs.python.org/zh-cn/3/tutorial/errors.html)
>>> try:
... b = 10
... a = b
... print(a)
... except:
... print("出错啦")
...
10
>>>
>>> try:
... # b = 10
... a = b
... print(a)
... except:
... print("出错啦")
...
出错啦
样例2:try/多个except
- 一个 try 语句可能有多个 except 子句,以指定不同异常的处理程序。 最多会执行一个处理程序。
- 最后的 except 子句可以省略异常名,以用作通配符。但请谨慎使用,因为以这种方式很容易掩盖真正的编程错误!它还可用于打印错误消息,然后重新引发异常(同样允许调用者处理异常):
>>> try:
... # b = 10
... a = b1
... print(a)
... except SyntaxError:
... print("SyntaxError")
... except SystemError:
... print("SystemError")
... except:
... print("otherError")
...
otherError
>>>
样例3:raise
- raise 语句允许程序员强制发生指定的异常
>>> raise NameError("name 'b1' is not defined")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'b1' is not defined
>>>
样例4:try/except/else/finally
- 先执行try block, 直到发现了错误,不再执行异常之后的代码。
- 执行except block,若匹配到异常类型,处理异常;若未匹配到,继续向下执行。
- else,无异常处理时会执行其代码
- finally,无论try语句是否有异常,最后都要执行的代码。
>>> try:
... # b3 = 10
... a = b3
... print(a)
... except SyntaxError:
... print("SyntaxError")
... except SystemError:
... print("SystemError")
... except:
... print("otherError")
... else:
... print("无异常处理时执行此行")
... finally:
... print("finally 子句在任何情况下都会被执行。")
...
otherError
finally 子句在任何情况下都会被执行。
>>>
>>>
>>> try:
... # b3 = 10
... a = b3
... print(a)
... except SyntaxError:
... print("SyntaxError")
... except SystemError:
... print("SystemError")
... else:
... print("无异常处理时执行此行")
... finally:
... print("finally 子句在任何情况下都会被执行。")
...
finally 子句在任何情况下都会被执行。
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
NameError: name 'b3' is not defined
>>>
参考链接:错误和异常