| 异常 | 描述 |
|---|---|
| NameError | 尝试访问一个没有申明的变量 |
| ZeroDivisionError | 除数为0 |
| SyntaxError | 语法错误 |
| KeyError | 请求一个不存在的字典关键字 |
| IndexError | 索引超出序列范围 |
| AttributeError | 尝试访问未知的对象属性 |
| ValueError | 传参类型不正确 |
| FileNotFoundError | 文件不存在 |
| AssertionError | 断言异常 assert判断 不对就会报异常 |
| IOError | 读取不存在的文件 |
try:
ggg
a = 1 / 0
int("abc")
except ValueError as e:
print(e)
except ZeroDivisionError:
print("除数为0")
except NameError as b:
print("b...")
print(b)
except Exception as a:
print("a...")
print(a)
else: # 没有任何异常发生的时候执行的
print("没有异常")
finally: # 不管有没有异常和异常有没有被捕获,都会执行
print("I am Finally")
except 捕获错误与触发的错误不一致,程序就捕获不到,抛出异常
如果父类异常捕获放在最前面,就会吞噬后面的子类异常
finally 不管有没有异常和异常有没有被捕获,都会执行 ,即使已经抛出异常并且已经return, finally体里面的代码都会运行
3、手动触发异常raise手动触发异常
raise异常类(“说明信息”)
raise没有接异常类,默认抛出RuntimeError异常类
try:
print("raise error")
raise # 注:手动触发异常
print("raise error end...") # 注:默认RuntimeError 运行过程中的异常
except Exception as e:
print("raise error end...")
print(e)
# 注:raise抛出的异常类属于runtimeerror异常类
#可以手动抛出异常类,和添加说明信息
raise IndexError("this is test error")
except Exception as e:
print("exception error")
print(e)
4、嵌套异常
异常处理注意事项
- 只执行最先匹配的一个except
- 如果父类异常在最前面,会吞噬子类所有异常
- 多excpet注意:
只会匹配一个except
要先写子类异常再写父类异常
若果except捕获的错误与触发的错误不一致,程序会捕获不到
不建议使用异常来代替常规的检查,如 if … else判断
避免过多依赖于异常处理机制
在必要的时候,可以手动引发异常(raise)==>函数或方法
在finally中使用return,异常无法回溯
在函数中的try/except 语句中使用return后,仍然会执行finally 中的内容
- finally==>正常或异常都会执行
- return==> 直接退出函数,返回值给主程序
执行脚本命令之前+time 获取命令执行的时间
可以发现for循环在try里面 好一点



