异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。一般情况下,在Python无法正常处理程序时就会发生一个异常。异常是Python对象,表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行
关键字:try、except、finally、else、raise
python中捕捉异常模块try/except,其中python中有一些自定义的异常,具体如下
AttributeError 调用不存在的方法引发的异常
EOFError 遇到文件末尾引发的异常`
ImportError 导入模块出错引发的异常
IndexError 列表越界引发的异常
IOError I/O操作引发的异常,如打开文件出错等
KeyError 使用字典中不存在的关键字引发的异常
NameError 使用不存在的变量名引发的异常
TabError 语句块缩进不正确引发的异常
ValueError 搜索列表中不存在值引发的异常
ZeroDivisionError 除数为零引发的异常
try:
except Exception:
finally:
自定义异常
# 自定义异常类
class AgeError(Exception):
def __init__(self, age):
self.__age = age
# 重写str方法
def __str__(self):
return "您传入的年龄不满足需求:age=%d" % self.__age
age =10
try:
raise AgeError(age)
except Exception as e:
print(e)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-udglPlq2-1659251982048)(image/image_qBvcHgZtad.png)]](https://1000bd.com/contentImg/2022/08/02/223437560.png)
traceback.print_exc()实现 通过 系统角度 打印后继续执行
这样捕捉到异常后程序还会继续往后执行,如果不捕捉的话,那么抛出该运行时异常程序则会中断
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-09J85RtE-1659251982049)(image/image_km5bLc6iB3.png)]](https://1000bd.com/contentImg/2022/08/02/223437690.png)
注:实体类中 要有__enter__ __exit__函数,分别 负责初始化以及清理工作
if else 异常模式
try:
<语句> #运行别的代码
except <名字>:
<语句> #如果在try部份引发了'name'异常
except <名字>,<数据>:
<语句> #如果引发了'name'异常,获得附加的数据
else:
<语句> #如果没有异常发生
多异常处理
...
except(ZeroDivisionError, TypeError, NameError):
...
try-finally 语句
任何情况下都会执行finall中的语句
try:
<语句>
finally:
<语句> #退出try时总会执行
raise
with as取代try-finally
要求
with所求值的对象必须有一个__enter__()方法,一个__exit__()方法
with 实体类 as 返回值
方法或函数体
class Sample:
def __enter__(self):
print("In __enter__()")
def __exit__(self, type, value, trace):
print("In __exit__()")
S=Sample()
with S as sample:
raise Exception("错误出现")
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5OrHDXLm-1659251982049)(image/image_sbfuWClWsq.png)]](https://1000bd.com/contentImg/2022/08/02/223437891.png)
try:
c = 1 / 0
except Exception as e:
#收集出现的错误
info = sys.exc_info()
#跟踪该错误信息,limit参数为打印跟踪的条目
traceback.print_tb(info[2])
print(info)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nm04RxLx-1659251982050)(image/image_-blQV9BUQg.png)]](https://1000bd.com/contentImg/2022/08/02/223438040.png)
补充一下 日志打印 用 log