Python 异常处理总结
异常的概念
异常是程序运行过程中出现的一些不正常的情况,如:输入错误、读取文件失败、网络连接异常等等。
异常处理的机制
Python 通过 try...except...finally 语句来处理异常。try 语句块包含了需要观察异常的代码,如果出现异常,则会跳转到 except 语句块中,执行指定的异常处理代码。finally 语句块中是一些无论是否有异常都需要执行的代码。
异常处理的方式
1. 捕获指定类型的异常
try:
# 尝试执行的代码
a = 1 / 0 # ZeroDivisionError
except ZeroDivisionError: # 捕获指定类型的异常
# 如果出现 ZeroDivisionError 异常,则执行此处代码
print("除数不能为0")
此处使用了 except
后面跟 ZeroDivisionError
,表示只捕获 ZeroDivisionError
异常类型。
2. 捕获多个异常类型
try:
# 尝试执行的代码
a = int("abc") # ValueError
b = 1 / 0 # ZeroDivisionError
except (ValueError, ZeroDivisionError): # 捕获多个异常类型
# 如果出现 ValueError 或 ZeroDivisionError 异常,则执行此处代码
print("代码有误,请检查输入")
此处使用了 except
后面跟多个异常类型的元组,表示捕获多个异常类型。
3. 捕获所有异常类型
try:
# 尝试执行的代码
a = int("abc") # ValueError
b = 1 / 0 # ZeroDivisionError
except Exception as e: # 捕获所有异常类型,并输出异常信息
# 如果出现任何异常,则执行此处代码
print("出现异常:", e)
此处使用了 except
后面没有跟任何异常类型,表示捕获所有异常类型。
重要提示:如果只写一个空的 except,一旦有异常发生,程序就会一直执行,相当于没有异常处理。因此,写 except 时一定要慎重,最好指定捕获的异常类型。
4. 抛出自定义的异常
# 自定义异常类,必须继承 Exception 类
class MyException(Exception):
pass
try:
# 尝试执行的代码
raise MyException("自定义异常") # 抛出自定义异常
except MyException as e:
# 捕获自定义的异常,并输出异常信息
print("出现自定义异常:", e)
此处使用了 raise
关键字来抛出自定义的异常,然后使用 except
捕获自定义的异常。
异常的执行顺序
当程序执行时,遇到异常会尝试寻找与之匹配的 except
,如果找到了则执行对应的异常处理代码。如果当前层次没有找到匹配的异常处理代码,则将异常“传递”给上一层级,继续寻找匹配的异常处理代码。
例如:
try:
try:
a = 1 / 0
except NameError:
print("处理 NameError 异常")
except ZeroDivisionError:
print("处理 ZeroDivisionError 异常")
这个程序中抛出了 ZeroDivisionError
异常,但是在第一个 try
中没有找到匹配的异常处理代码,因此将异常“传递”给了第二个 try
,在第二个 try
中找到了匹配的异常处理代码,最后输出 “处理 ZeroDivisionError 异常”。
示例1
# 程序当中没有捕获异常,会崩溃
a = 1 / 0
此例中,由于除数为 0,程序会抛出 ZeroDivisionError
异常,但是程序没有对其进行异常处理,因此程序执行时就会崩溃。
示例2
try:
a = int("abc")
except ValueError:
print("输入非数字")
此例中,程序尝试将字符串 "abc"
转换成整数,但是由于字符串无法被转换成整数,会抛出 ValueError
异常。程序使用 try...except
结构对 ValueError
异常进行了处理,输出了友好的提示信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 异常处理总结 - Python技术站