Python3 异常
目录
Python使用一个叫做异常的特殊对象,来处理程序执行期间发生的错误。
当程序发生错误时,Python会创建一个异常对象,如果程序中没有包含对该异常的处理代码,那么程序将终止,并返回一个traceback,里面包含有关的错误报告;相反,如果包含了对异常处理的代码,程序将继续运行。
try-except
Python使用try-except代码块来处理异常。把可能发生异常的代码放在try中,except将对产生的异常对象进行处理:
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# 可能发生异常的代码放在try代码块中
try:
print(5 / 0)
# except对产生的异常对象进行处理
except ZeroDivisionError:
print("除数不能为零")
print('计算结束')
运行结果:
F:\project\venv\Scripts\python.exe F:/project/error.py
除数不能为零
计算结束
try-except-else
try-except-else的工作原理是,当try中的代码发生异常时,就执行except中的代码;当try中的代码成功执行时,就执行else中的代码。所以把可能发生异常的代码放在try中,把仅在try中代码成功执行时才需要执行的代码放在else中,except是对产生的异常对象完成相应的处理工作。
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# 可能发生异常的代码放在try代码块中
try:
print(6/ 3)
# except对产生的异常对象进行处理
except ZeroDivisionError:
print("除数不能为零")
# 仅当try中代码执行成功时才执行else
else:
print("运算正常")
print('计算结束')
运行结果:
F:\project\venv\Scripts\python.exe F:/project/error.py
2.0
运算正常
计算结束
处理ZeroDivisionError异常
见上面的代码。
处理FileNotFoundError异常
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
file_name = 'a.txt'
try:
with open(file_name) as file_object:
content = file_object.read()
except FileNotFoundError:
msg = "找不到文件"+file_name
print(msg)
else:
print(content)
运行结果:
F:\project\venv\Scripts\python.exe F:/project/FileNotFoundError.py
找不到文件a.txt
实例:
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
def pet_names():
"""读取所有宠物名字的函数"""
file_names = ['cats.txt', 'dogs.txt', 'mouse.txt']
try:
for t in file_names:
with open(t) as file_object:
names = file_object.read()
print(names)
except FileNotFoundError:
pass
else:
print("\n无异常")
status = input("你是否想要给宠物取名字?(Y OR N)")
if status == 'Y':
print("请从以下名字中选一个你喜欢的名字吧:")
pet_names()
else:
print("已退出")