暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

python获取异常信息exc_info和print_exc

原创 梯阅线条 2024-01-09
258

1 python获取异常信息exc_info和print_exc

python通过sys.exc_info获取异常信息,通过traceback.print_exc打印堆栈信息,包括错误类型和错误位置等信息。

1.1 异常不一定是错误

所有错误都是异常,但并非所有异常都是错误。比如,有些异常表示警告(参考warnings模块),有些异常是功能信号(比如,input函数从标准输入流sys.stdin读取输入)。

用法

while True: try: ins=input('请输入:') except EOFError as e: # except 代码块 break else: print('你输入的是:',ins)

描述

(1) 通过input循环获取用户输入;

(2) 通过EOFError 作为功能信号,触发则退出输入;

(3) 通过Ctrl+D(windows)或Ctrl+Z(Unix)触发EOFError 异常;

示例

>>> import traceback >>> while True: try: ins=input('请输入:') except EOFError as e: # 通过 Ctrl+D 或 Ctrl+Z 触发 EOFError print('遇到 Ctrl+D 或 Ctrl+Z,退出输入') print(traceback.print_exc()) break else: print('你输入的是:',ins) 请输入:梯阅线条 你输入的是: 梯阅线条 请输入: 遇到 Ctrl+D 或 Ctrl+Z,退出输入 Traceback (most recent call last): File "<pyshell#58>", line 3, in <module> EOFError: EOF when reading a line None

1.2 异常条件语句和raise

python自定义异常也可用于触发非错误的情况,根据条件语句触发raise异常。

用法

class FoundByExc(Exception):pass def search_by_exc(strlist,target): if True: raise FoundByExc("xxx") else: return "xxx"

描述

搜索指定内容时触发异常。

(1) 自定义一个异常类;

(2) 条件成立,触发异常;

示例

>>> class FoundByExc(Exception):pass >>> def search_by_exc(strlist,target): for s in strlist: if s == target: raise FoundByExc("在{}找到'{}'".format(strlist,target)) else: return "在{}未找到'{}'".format(strlist,target) >>> def test_searchbyexc(strlist,target): try: sbe=search_by_exc(strlist,target) except FoundByExc as fbe: print(fbe) else: print(sbe) >>> strlist=['梯阅线条','tyxt.work','9555'] >>> target1='梯阅线条';target2='tyxt' >>> test_searchbyexc(strlist,target1) 在['梯阅线条', 'tyxt.work', '9555']找到'梯阅线条' >>> test_searchbyexc(strlist,target2) 在['梯阅线条', 'tyxt.work', '9555']未找到'tyxt'

1.3 sys.exc_info获取异常信息

python中空的except捕获任何未被捕获的异常,通过sys.exc_info获取捕获的实际异常。

用法

import sys sys.exc_info()

描述

返回元组(type,value,traceback),

type:捕获的异常类型;

value:捕获的异常类的实例;

traceback:触发异常的调用堆栈;

示例

>>> try: 1+[] except: print(sys.exc_info()) (<class 'TypeError'>, TypeError("unsupported operand type(s) for +: 'int' and 'list'"), <traceback object at 0x03EFEE40>)

1.4 traceback.print_exc打印异常堆栈

用法

import traceback try: # try 代码块 except xxx: # except 代码块 traceback.print_exc()

描述

当Python程序发生异常时,通过traceback.print_exc()获取异常的详细信息,包括异常类型、异常值和异常发生的位置信息。

(1) 导入 traceback模块;

(2) 在except处理器,调用traceback.print_exc()方法;

示例

>>> import traceback >>> try: 1+[] except: traceback.print_exc() Traceback (most recent call last): File "<pyshell#79>", line 2, in <module> TypeError: unsupported operand type(s) for +: 'int' and 'list'

2 END

本文首发微信公众号:梯阅线条

更多内容参考python知识分享或软件测试开发目录。

文章转载自梯阅线条,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论