python 抓取异常及异常的释义

前言

要用到捕捉异常,所以搜了一下顺带分享.

参考来自 Lapland Stark 大神的分享

还有来自 ZiHuiJin 大神的分享


知识点:

try:
    #可能有异常的代码段
except errorname1:    #前面有try发生异常后寻找except后面的异常类型
    #处理异常的代码1
except errorname2:    #如果上面的异常类型不是正在发生的类型就继续寻找下一个except
    #处理异常的代码2
else:
    #如果程序没发生异常执行的代码
finally:    #抓到抓不到都会执行下面的代码
    #注定会执行的代码

#可以有多个except最少一个
#finally可有可无
#异常类型errorname的名字不能随便取
#errorname是系统定义的,自己也可以用class来继承定义(呵呵,这个我不会)

代码:

下面的l_error是我自己弄的字典,

如果不认识异常类型可以用来查看中文释义.

后面的代码中有引用这个字典,

要使用下面代码中的try语句,又用不上这个字典的时候,

记的自行清理(避免bug叠bug)


l_error={
'BaseException':'所有异常的基类',
'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':'用户代码生成的警告'}
i=21
#-------------字典是无序的,用序号来取值会不会太危险?!---------------
print(f'l_error字典的第{i+1}个值:',l_error[list(l_error.keys())[i]])
print('\n---------------one----------------------------')
try:            #主动抛出异常(名字随便拿一个)
    print('哈利波特骑着扫帚飞')
    raise NameError('而我的error,却只能清理垃圾堆')
except NameError as w:      #自己抛完了自己抓
    print("sorry sorry",repr(w))

lis = [1,2,3]

print('\n---------------two----------------------------')
#前面的raise后面是errorname('异常信息')    用括号存放异常信息
#下边是assert     断言内容 ,'异常信息'     用逗号存放异常信息
#(异常信息是可以省略的)
try:    #捕捉assert抛出的AssertionError
    assert len(lis)==4,'你瞅啥!'       #逻辑为False时触发AssertionError
except AssertionError as w:
    print('瞧一瞧看一看了啊!\n这就是传说中的assert抛出的error:\n',
          repr(w),'\n     瞅你咋地!\n',l_error['AssertionError'])

print('\n异常外的测试:  ',list)     #前面捕捉了所以这一句能执行

print('\n---------------three--------------------------')
try:        #捕捉name error
    dir(li)
except NameError as w:
    print("事先要取名字哦^_^,这都成黑户了.",repr(w))

print('\n异常外的测试:  ',lis)

print('\n----------------four--------------------------')
try:        #对象无属性的异常
    list.a
except AttributeError:
    print('小样!穿个马甲我就不认识你啦!\n你是:',l_error['AttributeError'])
finally:
    #抓不到也执行(寻找一线生机)(处理非常重要的东西)(挽救点啥)(拉上一个垫背的!)
    print("跳出三界外!不在五行中!->finally")

print('\n完了芭比Q了!')

输出:

l_error字典的第22个值: 映射中没有这个键

---------------one----------------------------
哈利波特骑着扫帚飞
sorry sorry NameError('而我的error,却只能清理垃圾堆')

---------------two----------------------------
瞧一瞧看一看了啊!
这就是传说中的assert抛出的error:
 AssertionError('你瞅啥!')
     瞅你咋地!
 断言语句失败

异常外的测试:  

---------------three--------------------------
事先要取名字哦^_^,这都成黑户了. NameError("name 'li' is not defined")

异常外的测试:   [1, 2, 3]

----------------four--------------------------
小样!穿个马甲我就不认识你啦!
你是: 对象没有这个属性
跳出三界外!不在五行中!->finally

完了芭比Q了!


总结:

这是来自 lady_killer9 大神的总结

你可能感兴趣的:(抓取异常,python)