目录
Python使用被称为异常的特殊对象来管理程序执行期间发生的错误。当程序发生错误时,Python会创建一个异常对象。如果编写了处理异常的代码,程序将继续运行;如果未对异常进行处理,程序将停止,并显示一个traceback,其中包含有关异常的报告。
异常是使用try-except代码块处理的。try-except代码块让Python执行指定的操作,同时告诉Python发生异常时怎么办。使用了try-except代码块时,即便出现异常,程序也将继续运行,显示编写的友好信息,而不是traceback。
1、try-except代码块
可以使用try-except来处理可能发生的错误。
处理ZeroDivisionError异常的try-except代码块类似如下:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
try:
print(5/0)
except ZeroDivisionError:
print("You can't divide by zero!")
我们将导致错误的代码行print(5/0) 放在了一个try代码块中。如果try 代码块中的代码运行起来没有问题,Python将跳过except代码块; 如果try代码块中的代码导致了错误,Python将查找这样的except代码块,并运行其中的代码,即其中指定的错误与引发的错误相同。
在这个示例中,try代码块中的代码引发了ZeroDivisionError异常, 因此Python指出了该如何解决问题的except代码块,并运行其中的代码。这样,用户看到的是一条友好的错误消息,而不是traceback:
2、else代码块
else代码块:依赖于try代码块成功 执行的代码都应放到else代码块中。
try-except-else代码块的工作原理大致如下:
- Python尝试执行try代码块中的代码;只有可能引发异常的代码才需要放在try语中。
- 有时候,有一些仅在try代码块成功执行时才需要运行的代码;这些代码应放在else代码块中。
- except代码块告诉Python,如果它尝试运行try 代码块中的代码时引发了指定的异常,该怎么办。
下边例子是使用try-except-else执行除法运算的简单例子:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
print("Give me two numbers, and I'll divide them.")
print("Enter 'q' to quit.")
while True:
first_number = input("\nFirst number: ")
if first_number == 'q':
break
second_number = input("Second number: ")
if second_number == 'q':
break
try:
answer = int(first_number) / int(second_number)
except ZeroDivisionError:
print("You can't divide by 0!")
else:
print(answer)
上述代码Python尝试执行try代码块中的除法运算, 这个代码块只包含可能导致错误的代码。依赖于try代码块成功执行的代码都放在else代码块中;在这个示例中,如果除法运算成功,就使用else代码块来打印结果 。
except代码块告诉Python,出现ZeroDivisionError异常时该怎么办。如果try代码块因除零错误而失败,我们就打印一条友好的消息,告诉用户如何避免这种错误。程序将继续运行,用户根本看不到traceback: