Python之异常处理
异常处理
1. 异常处理:程序一旦发生异常,就不会继续执行,所以我们需要使用处理这种异常。
a. 使用if规避,但是成本很高
b. try...except进行处理
try: "没有出现expect异常时执行,只执行到出现expect中异常的地方" except "异常类型" as "变量名": "出现expect异常时执行" print("提示的内容%s"%"变量名")
c. 一种错误类型,只能处理对应的一种错误,其他错误还会照常报错。
d. expect多个,只执行第一个匹配的expect异常处理
2. Exception:万能异常,只能判断有异常,没法判断具体的异常情况
a. 对于已经可以预见的,但是必须要处理的,不能完全规避的必须要处理的异常,要去指定他的处理方式
b. 对于不能确定的 ,使用万能异常
c. 万能异常应该放在所有异常之后
3. 异常处理中的else,try中的代码块没有发生异常时执行
4. finally,无论try中的代码块有没有发生异常,都会执行
a. 当发生了异常return时,还能执行finally,但是要先执行finally,再return
b. 主要做一些清理的工作,把之前打开的链接 文件都关掉,避免因为程序异常造成的浪费资源和逻辑问题
5. 装饰器
def wrappr(func): def inner(*args,**kwargs): try: return func(*args,**kwargs) finally: "清理工作" return inner
6. 顺序问题
try: f = open("file") int(f.read()) except ValueError: # try中出现ValueError异常时执行 print("读文件失败") except Exception as e: print(e) else: # try代码块中没有异常的时候才会被执行 print("操作成功") finally: # finally代码块中的代码永远执行 f.close() 复制代码
7. raise:主动触发异常
assert:断言,类似if判断
assert 1==2 # 报错,之后的程序都不会执行
try: num = input("num:") int(num) print(num) a = 1 sum(12,33,4) except ValueError: print("请输入一个数字") except NameError: print("命名错误") except TypeError: print("数据类型错误")