- 到目前为止,在 Python 程序中遇到错误,或“异常”,意味着整个程序崩溃。不希望这发生在真实世界的程序中。
- 相反,希望程序能检测错误,处理它们,然后继续运行。
实例1:
当试图用一个数除以零时,就会发生 ZeroDivisionError。
根据错误信息中给出的行号,知道 spam()中的 return 语句导致了一个错误。
中断程序的执行。
1 def spam(divideBy): 2 return 42 / divideBy 3 4 print(spam(2)) 5 print(spam(12)) 6 print(spam(0)) 7 print(spam(1))
21.0
3.5
Traceback (most recent call last):
File "C:/zeroDivide.py", line 6, in <module>
print(spam(0))
File "C:/zeroDivide.py", line 2, in spam
return 42 / divideBy
ZeroDivisionError: division by zero
实例2:
错误可以由 try 和 except 语句来处理。
那些可能出错的语句被放在 try 子句中。
如果在 try 子句中的代码导致一个错误,程序执行就立即转到 except 子句的代码。
一旦执行跳到 except 子句的代码,就不会回到 try 子句。它会继续照常向下执行。
1 def spam(divideBy): 2 try: 3 return 42 / divideBy 4 except ZeroDivisionError: 5 print('Error: Invalid argument.') 6 7 print(spam(2)) 8 print(spam(12)) 9 print(spam(0)) 10 print(spam(1))
21.0
3.5
Error: Invalid argument.
None
42.0
实例3:
对比实例2:
print(spam(1))从未被执行是因为,
一旦执行跳到 except 子句的代码,就不会回到 try 子句。它会继续照常向下执行。
1 def spam(divideBy): 2 return 42 / divideBy 3 4 try: 5 print(spam(2)) 6 print(spam(12)) 7 print(spam(0)) 8 print(spam(1)) 9 except ZeroDivisionError: 10 print('Error: Invalid argument.')