#使用异常处理,可以在程序因发生异常时继续往下执行。若没有异常处理,程序在发生异常时就会退出
1.异常处理的基本语法
2.常用的异常名
3.except 语句的几种用法
4.raise手工抛出异常
5.assert语句抛出异常
6.自定义异常类
1.异常处理的基本语法
Python中使用 try 语句来处理出现的异常, try 语句中也可以有一个 else语句块,表示若未发生异常。一般的 try 语句基本形式如下:
try:
<语句块1> #可能产生异常的语句
except <异常名1>: #要处理的异常
<语句块> #异常处理语句
except <异常名2>: #要处理的异常
<语句块> #异常处理语句
.........
else:
<语句块> #未触发异常,则执行改语句
finally:
<语句块> #无论是否触发 异常,都执行此语句
其中 else 和 finally 是可选的。
def fun(index):
lt = [1,2,3]
try:
print(lt[index])
except IndexError:
print("Index Error")
else:
print("Index OK!")
if __name__ == '__main__':
fun(5)
fun(1)
'''
#打印结果:
Index Error
2
Index OK!
'''
2.常用的异常名
异常名 | 描述 |
AttributeError | 调用不存在的方法引发的异常 |
EOFError | 遇到文件结尾引发的异常 |
ImportError | 导入模块出错引发的异常 |
IndexError | 列表越界引发的异常 |
IOError | I/O操作引发的异常,如打开文件出错 |
KeyError | 使用字典中不存在的关键字引发的异常 |
NameError | 使用不存在的变量名引发的异常 |
TabError | 语句块缩进不正确引发的异常 |
ValueError | 搜索列表中不存在的值引发的异常 |
ZeroDivisionError | 除数为零引发的异常 |
3.except语句的几种用法
1. except: #捕获所有异常;
2. except <异常名>: #捕获指定异常;
3. except (异常名1,异常名2): #捕获异常1或者异常2
4. except <异常名> as <数据>: #捕获指定异常及其附加数据
5. except (异常名1,异常名2) as <数据> #捕获异常1或者异常2及其异常的附加数据
4.raise手工抛出异常
使用raise 可以抛出各种预定的异常,即使在程序运行时根本不会引发该异常
raise 的使用:
raise 异常名
raise 异常名,附加数据
raise 类
示例:
def fun():
for i in range(5):
try:
if i == 2:
raise NameError
except NameError:
print("get NameExcept")
if __name__ == '__main__':
fun()
'''
#打印结果:
get NameExcept
'''
5.raise语句抛出异常
assert语句也是会抛出异常的,一般形式是: assert 条件 。当条件为假时,就会抛出AssertionError异常。
def fun():
for i in range(5):
try:
assert i<2 #当 i >=2时,就会触发异常
except AssertionError:
print("get AssertionError")
if __name__ == '__main__':
fun()
'''
#打印结果:
get AssertionError
get AssertionError
get AssertionError
'''
assert语句一般用于在程序开发时测试代码的有效性,比如某个变量的值必须在一定范围内,而当运行时得到的值不符合要求,则引发异常,对开发者提醒。所以一般在程序开发中,都不去捕获这个异常,而是让它中断程序。原因是程序出现了问题,不应继续运行。
6.自定义异常类
在python中自定义异常类只需要继承 Exception 类即可。如:
class MyError(Exception):
pass
这就是一个简单的异常类。
class MyException(Exception):
def __init__(self,test):
self.test = test
def __str__(self):
return self.test
if __name__ == '__main__':
raise MyException('MyException!!!')
'''
#打印结果:
Traceback (most recent call last):
File "C:/Users/abc/PycharmProjects/untitled3/1", line 8, in <module>
raise MyException('MyException!!!')
__main__.MyException: MyException!!!
'''
可以看到通过调用 raise语句,可以成功抛出自定义的异常MyException