异常
定义:程序报错
常见的错误
KeyboardInterrupt 用户主动结束程序时触发
AttributeError:访问类里面没有的属性
TypeError:访问非法数据类型
Exception:通用异常,前几种能捕获到的异常,在这个里面都能捕获
异常处理机制
捕获异常并且让程序运行起来
使用关键字Try except finally else等组合成不同的异常处理机制
异常处理分为三种
1.捕获单个异常
格式
try:
#有可能发生异常的代码
except 某个异常:
#异常发生后要执行的代码
else:
#如果没有异常发生,在try执行完毕后执行这里的代码
finally:
#不管有没有捕获道异常,最后都会执行
(else和finally属于可选项)
# 捕获单个异常
try:
x = 18
y = 0
print(x/y)
except ZeroDivisionError:
print('除数不能为0')
else:
print("没有捕获到异常,代码正常运行")
finally:
print("不管有没有捕获到异常,我都会正常运行")
2.捕获多个异常
格式:
try:
#有可能发生异常的代码
except (第一个异常,第二个异常..):
#异常发生后要执行的代码
else:
#如果没有异常发生,在try执行完毕后执行这里的代码
finally:
#不管有没有捕获道异常,最后都会执行
# 捕获多个异常
# 1.本质还是单个异常捕获
try:
x = 18
y = 0
print(x / y)
except ZeroDivisionError:
print('除数不能为0')
except NameError:
print('变量未定义')
else:
print("没有捕获到异常,代码正常运行")
# 2.本质为多个异常捕获,使用元组去接收可能出现的异常
try:
x = 18
y = 0
print(x / y)
except (ZeroDivisionError, NameError):
print('除数不能为0')
else:
print("没有捕获到异常,代码正常运行")
3.捕获所有的异常
格式:
try:
#有可能发生异常的代码
except Exception:
#异常发生后要执行的代码
else:
#如果没有异常发生,在try执行完毕后执行这里的代码
finally:
#不管有没有捕获道异常,最后都会执行
# 捕获所有的异常
try:
x = 18
y = 0
print(x / y)
except Exception:
print('除数不能为0')
else:
print("没有捕获到异常,代码正常运行")
# 但通常我们不知道会发生啥 我们就会在Exception后 补上as e再将e打印出来就可以看到发生了什么错误
try:
x = 18
y = 0
print(x / y)
except Exception as e:
print(e) # 打印出现异常的具体描述
# else:
# print("没有捕获到异常,代码正常运行") else语句可有可无,看需求
使用关键字raise手动抛出异常,格式:
raise Exception (arg) 其中Exception是抛出的异常,arg是提供关于异常的描述信息
# 通过raise关键字手动抛出异常
import time
for i in range(100):
print(i)
time.sleep(1)
raise NameError ('我手动抛出了异常
自定义异常
可以自己定义属于自己的异常类型,但必须继承Exception类,其格式为:
class 类异常名(Exception)
在python中记录日志使用logging库,日志的级别:
1.CRITICAL:系统崩溃级别的错误,必须立即处理
2.ERROR;运行时的错误,可能导致程序无法正常运行
3.WARNING:警告信息
4.INFO:信息性消息,程序正常运行
5.DEBUG;详细信息,通常在诊断问题时使用
浙公网安备 33010602011771号