Python将前一行写入variab

2024-04-20 09:08:32 发布

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

我正在使用一个模块,当它输出一个错误时,它只是打印这个错误并继续脚本,我想把这个错误放到一个变量中,但是由于这个行为,我不能只做例外作为e,所以我正在寻找一种方法,把以前打印的行放到一个变量中 注意:我试着在模块中查找它的打印位置,但是找不到


Tags: 模块方法脚本错误
1条回答
网友
1楼 · 发布于 2024-04-20 09:08:32

好吧,这不太好,但是你可以(希望写的东西不会搞笑)尝试劫持sys.stdout.write()(或者stderr,这取决于你写脚本的地方)。你知道吗

这可能是一种方法,尽管很难看:

import sys
class Wrap:
     def __init__(self):
         self.last_line = None
         self._next_line = ''
     def write(self, text, *args, **kwargs):
         sys.__stdout__.write(text, *args, **kwargs)
         self._next_line += text
         try:
             self.last_line = self._next_line.split('\n')[-2]
             self.next_line = self._next_line.split('\n')[-1]
         except IndexError:
             # We did not have \n yet and _next_line did not split
             # into at least two items
             pass


save_stdout = sys.stdout
sys.stdout = Wrap()
print('xxx\nzzz')  # This was that function you wanted to call
last_line = sys.stdout.last_line
sys.stdout = save_stdout

print(last_line)

这将给您zzz作为输出。也就是说,最后一行打印(不添加换行符),而sys.stdout是我们的包装。你知道吗

当然,您可以只编写一个函数包装器,并使用它来规范化黑客行为。你知道吗

相关问题 更多 >