Skip to main content

为警告和异常添加额外的上下文

项目描述

语境外

有时,当您收到警告和异常时,回溯是不够的。例如,您有一个包含 10.000 次迭代的循环。在第 1000 次迭代中,您调用的函数出现异常。因此,您希望为错误消息提供更多上下文。

有2个选项

  • 在发生异常的站点上提供更多上下文

    • 仅当您控制异常/警告生成时才有可能
    • 有时,没有足够的上下文开始(即您正在调用一些常见的实用函数)
  • 在异常/警告向上传递调用堆栈时提供额外的上下文

    • 可以在用户代码中“选择加入”,无需更改库。
    • 也适用于警告(通常不提供回溯信息)

例子

启发编写此库的主要示例:

to_process = { "file1": {...}, "file2": {...}, ...}

for k, v in to_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

现在,使用这个库,您可以为错误消息提供额外的上下文

from extra_context import provide_extra_context

to_process = { "file1": {...}, "file2": {...}, ...}

for k, v in to_process.items():
    with provide_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'

装饰者

还有一个装饰器,在发生错误时报告函数参数

import warnings
from extra_context import provide_call_context

@provide_call_context
def w(x):
    warnings.warn("Oops")

w(42)

这报告:

UserWarning: Oops
  |- In context: w(42)
  warnings.warn("Oops")

执照

版权所有 2018 Moritz Wanzenböck

特此免费授予任何人获得本软件和相关文档文件(“软件”)的副本,以不受限制地处理本软件,包括但不限于使用、复制、修改、合并的权利、发布、分发、再许可和/或出售本软件的副本,并允许向其提供本软件的人这样做,但须符合以下条件:

上述版权声明和本许可声明应包含在本软件的所有副本或大部分内容中。

本软件按“原样”提供,不提供任何形式的明示或暗示保证,包括但不限于适销性、特定用途适用性和非侵权保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任承担任何责任,无论是在合同、侵权或其他方面,由本软件或本软件的使用或其他交易引起或与之相关。软件。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

extra-context-1.0.0.tar.gz (4.3 kB 查看哈希)

已上传 source

内置分布

extra_context-1.0.0-py3-none-any.whl (4.7 kB 查看哈希)

已上传 py3