通过将可能引发错误的代码放在try-except代码块中,可提高这个程序抵御错误的能力。错 误是执行除法运算的代码行导致的,因此我们需要将它放到try-except代码块中。这个示例还包 含一个else代码块;依赖于try代码块成功执行的代码都应放到else代码块中:
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: ")
1 try:
answer = int(first_number) / int(second_number)
2 except ZeroDivisionError:
print("You can't divide by 0!")
3 else:
print(answer)
我们让Python尝试执行try代码块中的除法运算(见1),这个代码块只包含可能导致错误的 代码。依赖于try代码块成功执行的代码都放在else代码块中;在这个示例中,如果除法运算成 功,我们就使用else代码块来打印结果(见2)。 except代码块告诉Python,出现ZeroDivisionError异常时该怎么办(见3)。如果try代码块因除零错误而失败,我们就打印一条友好的消息,告诉用户如何避免这种错误。程序将继续运行, 用户根本看不到traceback:
Give me two numbers, and I'll divide them.
Enter 'q' to quit.
First number: 5
Second number: 0
You can't divide by 0!
First number: 5
Second number: 2
2.5
First number: q
try-except-else代码块的工作原理大致如下:Python尝试执行try代码块中的代码;只有可 能引发异常的代码才需要放在try语句中。有时候,有一些仅在try代码块成功执行时才需要运行 的代码;这些代码应放在else代码块中。except代码块告诉Python,如果它尝试运行try代码块中 的代码时引发了指定的异常,该怎么办。 通过预测可能发生错误的代码,可编写健壮的程序,它们即便面临无效数据或缺少资源,也 能继续运行,从而能够抵御无意的用户错误和恶意的攻击。