我有一个函数会在发生错误时写入 stderr:
class Scanner:
...
def next(self):
if ...
...
if not open_comment_count == closed_comment_count:
...
sys.stderr.write("error: unclosed comment at position ({0}, {1})".format(start_position, end_position))
...
break
...
else:
sys.stderr.write("error: illegal character \'{0}\' found " \
"at position @({1}, {2})".format(self.input_text[self.curr_position],
self.curr_position, self.curr_position))
error_flag = 1
break
if error_flag == 0:
token = Token(kind=4, eof_value="eof", start_position=self.curr_position, end_position=self.curr_position)
return token
该函数很长,所以我包含了写入stderr 的部分。我想做的是当这些错误发生时,我想打印这些错误并终止程序。所以总的来说,我想:
def main():
s = Scanner(input_string)
try:
while(True):
s.next()
except:
# print error message and stop
我坚持的是异常(exception)应该是什么。我想以某种方式捕捉到某些内容已写入 stderr,我希望在 main 中捕捉并打印出来,然后程序停止。基本上一直运行到异常发生。我知道这可以通过编写我自己的异常来完成,但是是否可以只检查是否有内容写入 stderr 然后打印出来?
请您参考如下方法:
您想做的事情会混淆问题:报告错误会成为一个信号,表明已经发生了错误。您可以通过为设置某种标志的 stderr 创建一个包装器来做到这一点:
import sys
class MyStdErr(object):
stderr = sys.stderr
waserr = False
def write(self, text):
self.waserr = True
self.stderr.write(text)
sys.stderr = MyStdErr()
现在 sys.stderr.waserr 是 True 如果 stderr 在任何时候被写入。
不过,我认为引发包含错误消息的异常、捕获它并打印错误(如 Nathan 所示)要好得多。
