1什么是异常?
异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。一般情况下,在Python无法正常处理程序时就会发生一个异常。异常是Python对象,表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行
2 python中常见异常
关键字:try、except、finally、else、raise
python中捕捉异常模块try/except,其中python中有一些自定义的异常,具体如下
AttributeError
调用不存在的方法引发的异常EOFError
遇到文件末尾引发的异常`ImportError
导入模块出错引发的异常IndexError
列表越界引发的异常IOError I/O
操作引发的异常,如打开文件出错等KeyError
使用字典中不存在的关键字引发的异常NameError
使用不存在的变量名引发的异常TabError
语句块缩进不正确引发的异常ValueError
搜索列表中不存在值引发的异常ZeroDivisionError
除数为零引发的异常
3异常的捕获
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)
traceback.print_exc()
实现 通过 系统角度 打印后继续执行
这样捕捉到异常后程序还会继续往后执行,如果不捕捉的话,那么抛出该运行时异常程序则会中断
注:实体类中 要有__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("错误出现")
4 异常跟踪
try: c = 1 / 0 except Exception as e: #收集出现的错误 info = sys.exc_info() #跟踪该错误信息,limit参数为打印跟踪的条目 traceback.print_tb(info[2]) print(info)
- 补充一下 日志打印 用 log