python_异常处理_断言
一、Python标准异常
常用异常 | |
Exception | 常规错误的基类 |
AttributeError | 试图访问一个对象没有的属性 |
IOError | 输入/ 输出异常,基本上是无法打开文件 |
ImportError | 无法引入模块或包,一般为路径或名称错误 |
IndentationError | 语法错误,代码没有正确对齐(缩进错误) |
IndexError | 下标索引超出序列边界 |
KeyError | 试图访问字典里不存在的键 |
keyboardInterrupt | Ctrl+C被按下 |
NameError | 使用一个未被赋予的变量 |
SyntaxError | Python代码非法,代码不能编译 |
UNboundLocalError | 试图访问一个还未被设置的局部变量 |
ValueError | 传入一个调用者不期望的值,即类型是正确的 |
TypeError | 对类型无效的操作 |
标准异常 | |
BaseException | 所有异常的基类 |
SystemExit | 解释器请求退出 |
Stoplteration | 迭代器没有更多的价值 |
GeneratorExit | 生成器(generator)发送异常来通知退出 |
StandarError | 所有的内建标准异常的基类 |
ArithmeticError | 所有数值计算错误的基类 |
FloatingPointError | 浮点计算错误 |
OverflowError | 数值运算超出最大限制 |
ZerodivisionError | 除(或取模)零(所有数据类型) |
AssertionError | 断言语句失败 |
EOFError | 没有内建输入,到达EOF标记 |
EnvironmentError | 操作系统错误的基类 |
OSError | 操作系统错误 |
WindowsError | 系统调用失败 |
ImportError | 无效数据查询的基类 |
MemoryError | 内存溢出错误 |
ReferenceError | 弱引用(weak reference)试图访问已经垃圾回收了的对象 |
RuntimeError | 一般的运行时的错误 |
NotlmplementedError | 尚未实现的方法 |
TabError | Tab和空格混用 |
SystemError | 一般的解释器系统错误 |
UnicodeError | Unicode相关的错误 |
UnicodeDecodeError | Unicode解码时的错误 |
UnicodeEncodeError | Unicode编码时错误 |
UnicodeTranslateError | Unicode转换时错误 |
Warning | 警告的基类 |
DeprecationWarning | 关于被弃用的特征的警告 |
Futurewarning | 关于构造将来语义会有所改变的警告 |
OverflowWarning | 旧的关于自动提升为长整型(long)的警告 |
PendingDeprecationWarning | 关于特性将会被废弃的警告 |
RuntimeWarning | 可疑的运行时行为(runtime behavior)的警告 |
SyntaxWarning | 可疑的语法的警告 |
UserWarning | 用户代码生成的警告 |
二、异常处理
1.
def yichang():
while True:
try:
num = int(input('>>'))
num += 1
print('值',num)
except Exception as e:
print('{%s}我是一个错误..'%e)
yichang()
>>34
值 35
>>s
{invalid literal for int() with base 10: 's'} 我是一个错误。。
>>
2.
def yichang():
while(True):
try:
num = int(input('>>')) # 字符无法强制转换为整型
num = num+1
print("值",num)
except (ValueError ,TypeError) as e:
print("我是一个调用者不期望的错误。。。",e)
except Exception as e: # e 是try ..except .. 捕获到的异常,Exception 是基类(可以捕获全部的异常)
print('{%s} 我是一个错误。。'% e)
else:
print("要是上面没有错会执行我。。else")
finally:
print('不管上面错不错误【都会】执行我。。finally,yes,yes!!')
yichang()
>>1
值 2
要是上面没有错会执行我。。else
不管上面错不错误【都会】执行我。。finally,yes,yes!!
>>d
我是一个调用者不期望的错误。。。 invalid literal for int() with base 10: 'd'
不管上面错不错误【都会】执行我。。finally,yes,yes!!
>>
三、断言(assert)
明确的判断前面的某个条件是否符合你的要求,如果不符合,程序就是根本走不下去的错误,直接退出或抛出错误。例如:连接远程的ftp , 没有IP地址,就根本连接不上
q=2
try:
assert q == 1+1
assert q ==1+2 # 错误可以被抓住,但对于 这种错误最好不要去抓
except Exception as e:
print('我是被抓住的错误。。。%s' % e)
assert q ==1+1
assert 1 == 1+2
我是被抓住的错误。。。
Traceback (most recent call last):
File "D:/1.pycharm/day2018_11_15/断言.py", line 21, in <module>
assert 1 == 1+2
AssertionError
关于断言:https://www.cnblogs.com/shangren/p/8038935.html
断言是用来检查非法情况而不是错误情况的,用来帮开发者快速定位问题的位置。
异常处理用于对程序发生异常情况的处理,增强程序的健壮性和容错性。