目录
在程序运行过程中,经常会遇到各种各样的错误,这些错误统称为“异常”。
1. 异常
异常 | 描述 |
SyntaxError:invalid syntax | 无效语法 |
NameError | 尝试访问一个没有声明的变量引发的错误 |
IndexError | 索引超出序列范围引发错误 |
IndentationError | 缩进错误 |
ValueError | 传入的值错误 |
KeyError | 请求一个不存在的字典关键字引发错误 |
IOError | 输入输出错误 |
ImportError | 当import语句无法找到模块引发的错误 |
AttributeError | 当尝试访问未知的对象属性时引发的错误 |
TypeError | 类型不合适引发的错误 |
MemoryError | 内存不足 |
ZeroDivisionError | 当除数为0时引发的错误 |
2. 异常处理
2.1 try...except
在使用时,把可能产生异常的代码放在try语句块中,把处理结果放在except语句块中,这样,一旦try语句块中的代码出现错误,就会执行except语句块中的代码;但如果try语句块中的代码没有错误,将不执行except语句块中的代码。
语法格式如下:
try:
block1
except[ExceptionName[as alias]]:
block2
#block1:表示可能出现错误的代码块
#ExceptionName[as alias]:可选参数,用于指定要捕获的异常。ExceptionName表示要捕获的异常名称,as alias记录异常具体内容的别名。
#block2:进行异常处理的代码块
例如:
处理前:
def division(a,b):
result = a/b
print(result)
division(4,2)
division(4,0)
运行结果如下:
2.0
Traceback (most recent call last):
File "E:\PYTHON\base4.py", line 25, in <module>
division(4,0)
File "E:\PYTHON\base4.py", line 21, in division
result = a/b
ZeroDivisionError: division by zero
处理后无异常:
def division(a,b):
result = a/b
print(result)
if __name__ == '__main__':#规定,主程序,默认执行以下代码
try:
division(4,2)
print('成功了,除数正常')
except ZeroDivisionError:
print('出错了,除数不能为0')
运行结果如下:
2.0
成功了,除数正常
处理后捕获异常:
def division(a,b):
result = a/b
print(result)
if __name__ == '__main__':#规定,主程序,默认执行以下代码
try:
division(4,0)
print('成功了,除数正常')
except ZeroDivisionError:
print('出错了,除数不能为0')
运行结果如下:
出错了,除数不能为0
2.2 try...except...else
try...except...else语句,else语句用于指定当try语句块中没有发现异常时要执行的语句块。
例如:
def division(a,b):
result = a/b
print(result)
if __name__ == '__main__':#规定,主程序,默认执行以下代码
try:
division(4,2)
except ZeroDivisionError:
print('出错了,除数不能为0')
else:
print('成功了,除数正常,一切顺利!')
运行结果如下:
2.0
成功了,除数正常,一切顺利!
2.3 try...except...finally
如果程序中有一些在任何情形下都必须执行的代码,那么可以将它放在finally语句的代码块中。
例如:
def division(a,b):
result = a/b
print(result)
if __name__ == '__main__':#规定,主程序,默认执行以下代码
try:
division(4,2)
except ZeroDivisionError:
print('出错了,除数不能为0')
else:
print('成功了,除数正常,一切顺利!')
finally:
print('over')
运行结果如下:
2.0
成功了,除数正常,一切顺利!
over