仅显示来自traceb的第一行和最后一行

2024-10-01 17:36:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我用python构建了一个小的内部DSL。我正在使用assertvor验证。如果最终用户输入了错误的参数,dsl应该报告错误的地方。目前情况如下:

Traceback (most recent call last):
  File "tests/maskedtimefilter_test/FilterDSL_test.py", line 63, in test_dsl_validation
    input(0): self.regular
  File "/Users/sh/reetz/pythonpath/maskedtimedata/maskedtimefilter.py", line 885, in __lshift__
    kwargs = self.dsl_validation(kwargs)
  File "/Users/sh/reetz/pythonpath/maskedtimedata/maskedtimefilter.py", line 1483, in dsl_validation
    check_if_valid(parameter)
  File "/Users/sh/reetz/pythonpath/maskedtimedata/dsl.py", line 47, in kernel_a
    def kernel_a (x): assert isinstance(x, (list, tuple, np.ndarray)), "kernel must be a list."
AssertionError: kernel must be a list.

但最终用户是工程师,而不是计算机科学家。因此,一个最小的回溯是方便的。是否可以这样缩小对基本信息的回溯(故障在哪里,原因是什么)?:

^{pr2}$

我不情愿地想用普通的指纹!


Tags: inpytestshlinekernelusersdsl
3条回答

因为回溯的第一部分就是你所说的,你可以做一些简单的事情,比如:

try: 
    input(0): self.regular # base call
except AssertionError as ae: # catch the exception
    print(ae) # print out the message

您可以print输出您认为在except块中有用的任何内容。在

或者,您可以使用^{} module执行更复杂的操作。在

在您的调用堆栈中,您可以执行以下操作:

try:
    my_function_that_can_raise_exception()
except Exception: #or AssertionError
    import traceback
    traceback.print_exc(limit=1)

limit是要显示的堆栈跟踪项的深度。在您的情况下(1)

演示:

^{pr2}$

更多信息请访问^{} docs。在

为什么不将回溯数据作为一个数组返回并从中返回呢?在

import traceback
try:
     codethatwillthrowanexception()
except:
     exceptiondata = traceback.format_exc().splitlines()
     exceptionarray = [exceptiondata[-1]] + exceptiondata[1:-1]

相关问题 更多 >

    热门问题