python使用try-except-else处理异常
异常exception
Python 使用称为异常(exception)的特殊对象来管理程序执行期间发生的错误。每当发生让 Python 不知所措的错误时,它都会创建一个异常对象。如果你编写了处理该异常的代码,程序将继续运行;如果你未对异常进行处理,程序将停止,并显示一个traceback,其中包含有关异常的报告。
使用 try-except 代码块
在cmd中输入print(5/0)
会得到一个Traceback告诉我们除数不能为0
>>> print(5/0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
出现Traceback之后,代码也就停止运行了。
为了避免出先Traceback,我们可以使用try-except语句:如果 try 代码块中的代码运行起来没有问题,Python 将跳过 except 代码块;如果 try 代码块中的代码导致错误,Python 将查找与之匹配的 except 代码块并运行其中的代码。
try:
print(5/0)
except ZeroDivisionError:
print("除数不能为0!")
"""输出结果:
除数不能为0!
"""
使用 try-except-else 代码块
print("输入两个数,计算它们的商")
print("输入'q'停止")
while True:
first_number = input("\n第一个数字: ")
if first_number == 'q':
break
second_number = input("第二个数字: ")
if second_number == 'q':
break
answer = int(first_number) / int(second_number)
print(answer)
如果输入的第二个数字是0,同样会报错
输入两个数,计算它们的商
输入'q'停止
第一个数字: 5
第二个数字: 0
Traceback (most recent call last):
File "c:\Desktop\error\division_calculator.py", line 11, in <module>
answer = int(first_number) / int(second_number)
~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
ZeroDivisionError: division by zero
碰到异常时如何处理异常,需要使用 try-except-else 代码块,只有 try 代码块成功执行才需要继续执行的代码,都应放到 else 代码块中
print("输入两个数,计算它们的商")
print("输入'q'停止")
while True:
first_number = input("\n第一个数字: ")
if first_number == 'q':
break
second_number = input("第二个数字: ")
if second_number == 'q':
break
try:
answer = int(first_number) / int(second_number)
except ZeroDivisionError:
print('除数不能为0!')
else:
print(answer)
此时第二个数字是0时,会打印出除数不能为0!
输入两个数,计算它们的商
输入'q'停止
第一个数字: 5
第二个数字: 0
除数不能为0!
静默失败
print("输入两个数,计算它们的商")
print("输入'q'停止")
while True:
first_number = input("\n第一个数字: ")
if first_number == 'q':
break
second_number = input("第二个数字: ")
if second_number == 'q':
break
try:
answer = int(first_number) / int(second_number)
except ZeroDivisionError:
pass
else:
print(answer)
此时,第二个数字输入0时,不会出现异常,也不会提示除数不能为0!
输入两个数,计算它们的商
输入'q'停止
第一个数字: 5
第二个数字: 0