我正在使用smtpd及其捕获的ValueError异常,我在process_message中引发并将描述打印到stderr而不是引发错误。 打印出来的是我使用。
构造ValueError的字符串所以,如果我在process_message中执行此操作:
raise ValueError("550, This is the error")
我看到了
550, This is the error
控制台上的。 我不能为我的生活找到导致打印的代码。无论如何都要覆盖stderr以在每次打印某些内容时显示堆栈跟踪或以其他方式定位哪些代码行打印出这些行?
答案 0 :(得分:2)
您可以使用跟踪write()
:
import sys
import traceback
class FileTracer(object):
def __init__(self, out):
self.out = out
def write(self, data):
traceback.print_stack(None, None, sys.__stderr__)
self.out.write(data)
def flush(self):
self.out.flush()
def close(self):
self.out.close()
sys.stderr = FileTracer(sys.stderr)
sys.stderr.write("trigger\n")
sys.stderr.flush()
请注意,我使用__stderr__
来避免循环。