python异常处理

python提供了一个异常类,来处理代码中可能出现的异常

class BaseException BaseException是所有内建异常都继承于这个类。但用户自定义的异常类用不继承这个类,而是继承自Exception。 class Exception Exception traceback 当异常发生时python会自动创建traceback对象,并关联到traceback属性中,你可以使用with_traceback()创建异常和设置你自己的traceback。(Python3) raise python2到python3

raise E, V 改为raise E(V),raise E, V, T 改为raise E(V).with_traceback(T)

兼容python2和python3的写法

peewee
PY3:
def reraise(tp, value, tb=None):#type,value,traceback
    if value.__traceback__ is not tb:
        raise value.with_traceback(tb)
    raise value
PY2:
exec('def reraise(tp, value, tb=None): raise tp, value, tb') #在python3下会报语法错误,通过exec绕过检查

bottle
PY3:
def _raise(*a):
    raise a[0](a[1]).with_traceback(a[2])
PY2:
exec(compile('def _raise(*a): raise a[0], a[1], a[2]', '<py3fix>', 'exec'))

Ref: 1.https://mozillazg.github.io/2016/08/python-the-right-way-to-catch-exception-then-reraise-another-exception.html