python 异常处理

处理流程

try:
    1/0
except (ZeroDivisionError,NameError) as e:
    print("这里给出可能的出错信息",e)
else:
    print("如果try成功,执持这里")
finally:
    print("最后执行的内容,不管是否出现异常,都会执行的语句")

try:
    1/2
except (ZeroDivisionError,NameError) as e:
    print("xxx",e)
else:
    print("如果try成功,执持这里")
finally:
    print("最后执行的内容,不管是否出现异常,都会执行的语句")

try:
    1/0
except Exception as e:
    print("这果给出详细的出错信息",e)
else:
    print("如果try成功,执持这里")
finally:
    print("最后执行的内容,不管是否出现异常,都会执行的语句")

这里给出可能的出错信息 division by zero
最后执行的内容,不管是否出现异常,都会执行的语句
如果try成功,执持这里
最后执行的内容,不管是否出现异常,都会执行的语句
这果给出详细的出错信息 division by zero
最后执行的内容,不管是否出现异常,都会执行的语句

import traceback
class Test:
     def __enter__(self):
         print("enter")
         return self
     def __exit__(self, exc_type, exc_val, exc_tb):
         print(self,exc_type, exc_val, exc_tb)
         print(traceback.extract_tb(exc_tb))
         print("exit")
         return  True

with Test() as x:
    1/0

enter
<__main__.Test object at 0x000001A532943CC8> <class 'ZeroDivisionError'> division by zero <traceback object at 0x000001A532943E08>
[<FrameSummary file D:/Users/Error/Error2.py, line 13 in <module>>]
exit

import contextlib

@contextlib.contextmanager
def test2():
    try:
        yield
    except ZeroDivisionError as e:
        print("这里是错误信息",e)

with test2() as w:
    1/0

这里是错误信息 division by zero

posted on 2020-01-07 21:24  InnoLeo  阅读(151)  评论(0编辑  收藏  举报