模块之异常处理
异常处理
排错的时候,真正报错的时候是最下面
应用--可以用if规避,但是成本太高
--不能用if处理时,
异常处理的特点:一旦发生异常,程序就不在执行
try:
"没有出现expect异常时执行,只执行到出现expect中异常的地方"
except "异常类型" as "变量名":(在不能完全明确知道这个错误是发生了什么的时候,就用as把变量名打印出来)
print("提示的内容%s"%"变量名")
"出现expect异常时执行"
一种错误类型,只能处理对应的一种错误,其他错误还会照常报错
expect多个,只执行第一个对应的expect异常处理
万能异常---Exception--只能判断有异常,没法判断具体的异常情况
对于已经可以预见的,但是必须要处理的,不能完全规避的必须要处理的异常,要去指定他的处理方式
对于不能确定的 ,使用万能异常
万能异常应该放在所有异常之后
异常处理的else语句--当try语句没有发生异常时执行
finally--无论try中有没有发生异常,都会执行
当发生了异常return时,还能执行finally,但是要先执行finally,再return
主要做一些清理的工作,把之前打开的链接 文件都关掉,避免因为程序异常造成的浪费资源和逻辑问题

def wrappr(func): def inner(*args,**kwargs): try: return func(*args,**kwargs) finally: "清理工作" return inner
顺序问题 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()
raise --主动触发异常
断言--assert--相当于if判断
assert 1==2#---报错,之后的程序都不会执行
if是预防异常处理的

try: num = input("num:") int(num) print(num) a = 1 sum(12,33,4) except ValueError: print("请输入一个数字") except NameError: print("命名错误") except TypeError: print("数据类型错误")