我在一些函数中看到了这一行代码
__traceback_hide__ = True 是干什么的呢?它似乎是在试图抑制错误跟踪。在什么情况下,追溯应该被隐藏?
发布于 2016-09-07 05:05:15
可以将__tracebackhide__设置为在使用PyTest时从跟踪中隐藏函数。在Python粘贴包中使用__traceback_hide__似乎是为了同样的目的。
以下是paste.exceptions.collector文档对此的看法:
如果设置为true,则表示框架不应被缩写的跟踪所隐藏。这样,您就可以隐藏一些更大的框架的复杂性,让用户关注自己的错误。 通过将其设置为“之前”,在此之前的所有帧都将被丢弃。通过将其设置为“后”,那么在此之后的所有帧都将被丢弃,直到找到“重置”为止。在每种情况下,都包括设置它的框架,除非将'_and_this‘附加到值(例如,'before_and_this')。 注意,如果包含错误的框架通常不会按照这些规则显示,格式化程序将完全忽略这一点。
和PyTest文档在其相似的__tracebackhide__上
如果您有一个从测试中调用的测试助手函数,您可以使用pytest.fail标记来失败带有特定消息的测试。如果您在助手函数中的某个地方设置了__tracebackhide__选项,那么测试支持函数将不会出现在跟踪中。
因此,基本上,它们是为了避免将测试助手函数或其他您知道不是您正在尝试调试的问题的一部分的函数弄乱您的跟踪。
发布于 2016-09-07 04:58:12
看起来这是主要是为web框架提供方便。 (Sentry、werkzeug、粘贴、Django)来实现的,因此框架函数不包含在框架的高级异常报告功能中。
确切的行为可能因框架的不同而不同,例如,对于粘贴,它被记录为:
如果设置为true,则表示框架不应被缩写的跟踪所隐藏。这样,您就可以隐藏一些更大的框架的复杂性,让用户关注自己的错误。 通过将其设置为“之前”,在此之前的所有帧都将被丢弃。通过将其设置为“后”,那么在此之后的所有帧都将被丢弃,直到找到“重置”为止。在每种情况下,都包括设置它的框架,除非将'_and_this‘附加到值(例如,'before_and_this')。 注意,如果包含错误的框架通常不会按照这些规则显示,格式化程序将完全忽略这一点。
它不是一个标准变量,核心Python解释器不提供对它的支持。
发布于 2016-09-07 05:01:44
在搜索"python __traceback_hide__“时,我了解到,它的目的是让一个复杂的框架隐藏其内部工作的一部分,方法是从异常输出中抑制一些堆栈帧,这样用户就不会混淆大量无关的输出。
https://stackoverflow.com/questions/39361321
复制相似问题