向警告和异常添加其他上下文
extra-context的Python项目详细描述
附加上下文
有时,当你得到警告和例外,回溯是不够的。 例如,您有一个迭代次数为10000次的循环。在第1000次迭代中 调用的函数出现异常。因此,您希望为错误消息提供更多上下文。
有两个选项
在发生异常的站点提供更多上下文
- 只有在控制异常/警告生成时才有可能
- 有时,没有足够的上下文开始(即,您正在调用一些公共实用程序函数)
当异常/警告在调用堆栈中传递时,请提供其他上下文
- 在用户代码中可以是“opt-in”,不需要更改库。
- 也适用于警告(通常不提供回溯信息)
示例
激发编写此库的主要示例:
to_process={"file1":{...},"file2":{...},...}fork,vinto_process.items():cleaned=clean_data(v)write_output(k,cleaned)
如果clean_data(v)
中的某个地方出现异常或警告,“上下文”即
数据丢失。回溯可能类似于:
File "clean.py", line 35, in clean_data
ZeroDivisionError: division by zero
现在,使用此库,您可以为错误消息提供额外的上下文
fromextra_contextimportprovide_extra_contextto_process={"file1":{...},"file2":{...},...}fork,vinto_process.items():withprovide_extra_context(filename=k):cleaned=clean_data(v)write_output(k,cleaned)
这将报告与以下相同的错误:
File "clean.py", line 35, in clean_data
ZeroDivisionError: division by zero
|- In context: filename='file4'
装潢师
还有一个decorator在出现错误时报告函数参数
importwarningsfromextra_contextimportprovide_call_context@provide_call_contextdefw(x):warnings.warn("Oops")w(42)
此报告:
UserWarning: Oops
|- In context: w(42)
warnings.warn("Oops")
许可证
版权所有2018 Moritz Wanzenbóck
兹免费向任何获得本软件及相关软件副本的人授予许可 文档文件(“软件”),无限制地处理软件,包括但不限于 使用、复制、修改、合并、发布、分发、再授权和/或销售软件副本的权利,以及 在满足以下条件的情况下,允许向其提供软件的人员这样做:
上述版权通知和本许可通知应包含在 软件。
软件按“原样”提供,无任何明示或暗示的保证,包括但不限于 保证适销性,适合特定用途和不侵权。在任何情况下,作者或 无论是在合同诉讼、侵权诉讼或 否则,由本软件或本软件的使用或其他交易引起的,由本软件引起的,或与本软件有关的。