1、定义
异常指的是程序正常运行时发生时引发的错误。严格来说,语法错误和逻辑错误不属于异常。异常可以理解为程序 时而好使,时而不好使,并不是说这个程序本身就有错误存在执行不了。
2、产生原因
除零、下标越界、文件不存在、网络异常、类型错误、名字错误、字典键错误、磁盘空间不足
3、Python中的异常类
异常 | 描述 |
---|---|
NameError | 尝试访问一个没有申明的变量 |
ZeroDivisionError | 除数为零 |
TypeError | 不同类型间的无效操作 |
SyntaxError | 语法错误 |
IdexError | 索引超出序列范围 |
KeyError | 请求一个不存在的字典关键字 |
OSError | 操作系统错误(如要读文件不存在) |
ValueError | 传给函数的参数类型不正确,比如给int()函数传入字符串型 |
4、异常处理的结构
#类型一
try:
try块 #被监控的语句
except:
except块 #处理异常的语句
#类型二
try:
try块 #被监控的语句
except Exception[as reason]:
except块 #处理异常的语句
#类型三 (捕获多种异常)
try:
try块 #被监控的语句
except Exception1:
except 1 #处理异常类型1的语句
except Exception2:
except 2 #处理异常类型2的语句
except Exception3:
except 3 #处理异常类型3的语句
# 类型四(else&finally)
try:
try块 #被监控的语句
except FileNotFoundError:
except 1 #处理异常类型1的语句
except ValueError:
except 2 #处理异常类型2的语句
else:
执行语句
finally:
不论是否异常,都会执行的语句
5、代码示例
1.执行下面一段程序
f = fopen(“不存在的文件.txt”)
print(‘f.read()’)
f.close()
运行结果:我们可以使用try-catch进行一下包装
try:
f = open(“不存在的文件.txt”)
print(‘f.read()’)
f.close()
except:
print(‘这个文件不存在啊o(╥﹏╥)o’)
运行结果:
2.except 后不能覆盖所有错误,依然会报错
try:
int(‘abc’)
f = open(“不存在的文件.txt”)
print(‘f.read()’)
f.close()
except OSError:
print(‘这个文件不存在啊o(╥﹏╥)o’)
运行结果:
上述异常只是指明了操作系统异常,在文件打开异常时可以被处理,但是对于参数类型不正确的错误,程序仍然会异常退出。
改进方法:
try:
int(‘abc’)
f = open(“不存在的文件.txt”)
print(‘f.read()’)
f.close()
except OSError as reason:
print(‘这个文件不存在啊o(╥﹏╥)o\n错误原因是:’+str(reason))
except ValueError as reason:
print(‘类型转换出错啦!\n错误原因是:’+str(reason))
else:
print(‘没错,没错!’)
加上as reason可以得到系统的具体错误原因。
代码的再一次改进:
try:
int(‘abc’)
f = open(“不存在的文件.txt”)
print(‘f.read()’)
f.close()
except OSError as reason:
print(‘这个文件不存在啊o(╥﹏╥)o\n错误原因是:’+str(reason))
except ValueError as reason:
print(‘类型转换出错啦!\n错误原因是:’+str(reason))
except:
print(‘未知错误!’)
else:
print(‘没错,没错!’)
当上述提到的错误均没有被发现时,可以增加一个except相当于C语言switch语句中default的效果。