类末尾的Python回溯到打印堆栈

2024-03-29 06:07:00 发布

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

我有很多python类,它们动态地导入和运行几个测试脚本(就像一个测试自动化工具)。日志记录也非常清楚,它在正确的测试脚本中报告了一些错误。但是,错误发生在测试脚本使用的某个库中。这个错误是非常常见的Python错误- -需要超过0个值才能解压缩

库代码太大,日志记录没有提供任何有关库中发生此错误的行/语句的信息。在

我搞不清马车的路线。我应该在哪里打印回溯堆栈?在

有什么方法可以在程序终止前打印整个回溯吗?在

更新:

添加了许多调试语句后,脚本在此函数中失败-

def _print_pretty_results(self,diff):
    count = 1
    str = ''
    #Calculate Screen Buffer Size
    rows, columns = os.popen('stty size', 'r').read().split()
    for err in diff:
        err_dict = diff[err]
        for key in err_dict:
            exp_val = err_dict[key]["Exp"]
            act_val = err_dict[key]["Act"]
            str += "_"*int(columns)
            str += "\n\nMISMATCH NO. %d\n" % count
            str += "_"*int(columns)
            str += "\n\nAttribute : %s" % key
            str += "\nExpected  : %s" % exp_val
            str += "\nActual    : %s\n" % act_val
            count += 1


    str += "_"*int(columns)+"\n"
    return str

Tags: columnskeyin脚本forcount错误记录
2条回答

先用“导入回溯”如何 那么pdb.set_跟踪()交互调试

def _print_pretty_results(self,diff):
    count = 1
    str = ''

    try:
        #Calculate Screen Buffer Size
        rows, columns = os.popen('stty size', 'r').read().split()
        for err in diff:
            err_dict = diff[err]
            for key in err_dict:
                exp_val = err_dict[key]["Exp"]
                act_val = err_dict[key]["Act"]
                str += "_"*int(columns)
                str += "\n\nMISMATCH NO. %d\n" % count
                str += "_"*int(columns)
                str += "\n\nAttribute : %s" % key
                str += "\nExpected  : %s" % exp_val
                str += "\nActual    : %s\n" % act_val
                count += 1


        str += "_"*int(columns)+"\n"
    catch Exception, e:
        traceback.print_exc()
        import pdb; pdb.set_trace()
    return str

我猜对了- Python TypeError:需要超过0个值才能解包是因为语句

rows, columns = os.popen('stty size', 'r').read().split()

这里的问题是,上面的语句将计算缓冲区大小,并且您不允许脚本通过将输出重定向到某个文件来访问屏幕缓冲区,而该文件也是在后台使用nohup命令运行的。在

这是我尝试过的示例代码

^{pr2}$

我有四种不同的方式来运行这个脚本-

输出1

[root@localhost]# python test.py
44
168

输出2

[root@localhost]# python test.py > /tmp/out.log
[root@localhost]#

[root@localhost]# cat /tmp/out.log
44
168

输出3

[root@localhost]# python test.py > /tmp/out.log &
[root@localhost]#

[root@localhost]# cat /tmp/out.log
44
168

输出4

[root@localhost]# nohup python test.py > /tmp/out.log &
[root@localhost]#

[root@localhost]# cat /tmp/out.log
stty: standard input: Inappropriate ioctl for device
Traceback (most recent call last):
  File "test.py", line 2, in <module>
    rows, columns = os.popen('stty size', 'r').read().split()
ValueError: need more than 0 values to unpack

相关问题 更多 >