异常情况:python代码在运行期间发生的错误
python异常情况:
异常名称 | 描述 |
---|---|
BaseException | 所有异常的基类 |
SystemExit | 解释器请求退出 |
KeyboardInterrupt | 用户中断执行(通常是输入^C) |
Exception | 常规错误的基类 |
StopIteration | 迭代器没有更多的值 |
GeneratorExit | 生成器(generator)发生异常来通知退出 |
SystemExit | Python 解释器请求退出 |
StandardError | 所有的内建标准异常的基类 |
ArithmeticError | 所有数值计算错误的基类 |
FloatingPointError | 浮点计算错误 |
OverflowError | 数值运算超出最大限制 |
ZeroDivisionError | 除(或取模)零 (所有数据类型) |
AssertionError | 断言语句失败 |
AttributeError | 对象没有这个属性 |
EOFError | 没有内建输入,到达EOF 标记 |
EnvironmentError | 操作系统错误的基类 |
IOError | 输入/输出操作失败 |
OSError | 操作系统错误 |
WindowsError | 系统调用失败 |
ImportError | 导入模块/对象失败 |
KeyboardInterrupt | 用户中断执行(通常是输入^C) |
LookupError | 无效数据查询的基类 |
IndexError | 序列中没有没有此索引(index) |
KeyError | 映射中没有这个键 |
MemoryError | 内存溢出错误(对于Python 解释器不是致命的) |
NameError | 未声明/初始化对象 (没有属性) |
UnboundLocalError | 访问未初始化的本地变量 |
ReferenceError | 弱引用(Weak reference)试图访问已经垃圾回收了的对象 |
RuntimeError | 一般的运行时错误 |
NotImplementedError | 尚未实现的方法 |
SyntaxError | Python 语法错误 |
IndentationError | 缩进错误 |
TabError | Tab 和空格混用 |
SystemError | 一般的解释器系统错误 |
TypeError | 对类型无效的操作 |
ValueError | 传入无效的参数 |
UnicodeError | Unicode 相关的错误 |
UnicodeDecodeError | Unicode 解码时的错误 |
UnicodeEncodeError | Unicode 编码时错误 |
UnicodeTranslateError | Unicode 转换时错误 |
Warning | 警告的基类 |
DeprecationWarning | 关于被弃用的特征的警告 |
FutureWarning | 关于构造将来语义会有改变的警告 |
OverflowWarning | 旧的关于自动提升为长整型(long)的警告 |
PendingDeprecationWarning | 关于特性将会被废弃的警告 |
RuntimeWarning | 可疑的运行时行为(runtime behavior)的警告 |
SyntaxWarning | 可疑的语法的警告 |
UserWarning | 用户代码生成的警告 |
异常处理:编写了异常代码的话,程序也将会继续的执行操作
方法一:
使用:try....except....
(try....except....可以把python代码中遇到的问题直接抓到,并进行处理,然后让程序继续运行)
使用语法:try:
有可能出现异常的代码
except:
处理结果
错误示范:
print(a)
---------------打印结果---------------
print(a)
NameError: name 'a' is not defined
打印会提示:NameError: name 'a' is not defined
(注:a没有进行指明是什么)
正常示范:
try:
print(a)
except:
print("请指明a的变量")
-------------打印结果-------------
请指明a的变量
抛出异常的用法:raise
作用:可以先执行其他处理后,再把异常打印出来
try:
print(a)
except:
print("请指明a的变量")
raise
------------------打印结果------------------
请指明a的变量
print(a)
NameError: name 'a' is not defined
#当前我没有定义a变量的值
#然后在运行代码的时候,会直接执行print("请指明a的变量") 这条
#当执行完成后,再把异常抛出来
可以解释为:我要用车送东西,不知道车坏没坏?就会使用try...except...方法。如果车坏了(try),那么我就会考虑其他的办法(except),当送完后(except)里面完成后,那么使用raise办法告知哪里坏了
语法:try....except.....raise....else
作用:当try没有错误的时候,就是会选择else进行打印出来
a=10
try:
print(a)
except:
print("请指明a的变量")
raise
else:
print("a的值是{}".format(a))
----------------------打印结果----------------------
10 #是通过print(a)打印的
a的值是10 #是通过print("a的值是{}".format(a))
语法:try....except.....raise....else....finally......
作用:当try有错误的时候,就是会执行except里面的,并且通过raise打印出异常情况,但是else不进行执行,finally会进行最后的执行。【注:finally不管try有没有报错都是会执行的】
如(异常情况):
try:
print(a)
except:
print("请指明a的变量")
raise
else:
print("a的值是{}".format(a))
finally:
print("我管你报不报错,反正我一定是最后执行的")
-----------------打印结果-----------------
请指明a的变量
我管你报不报错,反正我一定是最后执行的
print(a)
NameError: name 'a' is not defined
如(非异常情况):
a=10
try:
print(a)
except:
print("请指明a的变量")
raise
else:
print("a的值是{}".format(a))
finally:
print("我管你报不报错,反正我一定是最后执行的")
----------------------打印结果----------------------
10
a的值是10
我管你报不报错,反正我一定是最后执行的
在except当中还可以带入对应错误基类代码
print(a)
--------------打印结果--------------
print(a)
NameError: name 'a' is not defined
(如:上图代码当中系统提示了错误是:NameError)
那么我们在except 当中就是可以进行指明,
语法是:except 错误基类 as 声明一个变量
注:1、如果知道错误基类的话,可以在except 后面进行指明
2、如果是使用不同的错误基类的话,在操作过程中还是会报错,铺捉不到错误
3、在不知道错误基类的话,还可以使用万能错误基类:Exception
如下图当中的
try:
print(a)
except NameError as e:
print("a的原因是:",e)
------------------打印结果------------------
a的原因是: name 'a' is not defined