我有一个包装另一个功能的功能。 (包装函数通过paramiko进行ssh调用,但这在这里可能并不重要。)包装函数似乎正在返回列表,但是当我尝试打印列表时,代码失败,并显示UnicodeEncodeError: 'ascii' codec can't encode characters in position 4843-4844: ordinal not in range(128)
代码:
tracelog = sys.stdout
def wrapper(*args, **kwargs):
global tracelog
print("Entering my_shell_func()", file=tracelog)
rval = my_shell_func(*args, **kwargs)
print("Exited my_shell_func()", file=tracelog)
print(" type(rval) =", type(rval), file=tracelog)
print(rval, file=tracelog)
return rval
最后一个print()语句失败,并出现以下错误:
Entering my_shell_func()
Exited my_shell_func()
type(rval) = <class 'list'>
Traceback (most recent call last):
…
File "./mytest", line 41, in wrapper
print(rval, file=tracelog)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 4843-4844: ordinal not in range(128)
到达此故障点大约需要一个小时,因此每次测试的成本都很高。我仍然不知道那个列表中有什么让print()感到不高兴。
有没有一种方法可以使print()完全打印任何东西,没有问题?
现在,我已经用try:…except:
包装了最后的print()语句,并显示了一条消息,“抱歉,无法打印该函数的输出,请按下”,这使我感到困惑,但是不够理想。