我有很多python类,它们动态地导入并运行多个测试脚本(它就像一个测试自动化工具)。日志记录也很清楚,它在正确的测试脚本中报告了一些错误。但是,错误发生在测试脚本使用的某个库中。错误是非常常见的pythonic错误 - - 需要超过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
答案 0 :(得分:2)
我猜对了 - Python TypeError:由于语句
,需要多于0个值才能解压缩rows, columns = os.popen('stty size', 'r').read().split()
这里的问题是,上面的语句将计算缓冲区大小,并且您不允许脚本通过将输出重定向到某个文件来访问屏幕缓冲区,并且使用nohup命令在后台运行也是如此。
以下是我尝试过的示例代码 -
import os
rows, columns = os.popen('stty size', 'r').read().split()
print rows
print columns
我运行此脚本的方式有四种 -
输出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
答案 1 :(得分:1)
首先使用“导入追溯”怎么样? 然后pdb.set_trace()以交互方式进行调试;
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