Python:抑制进入命令行时出现的错误?

问题描述 投票:0回答:5

当我尝试从命令行执行Python程序时,出现以下错误。这些错误不会对我的输出造成任何问题。我不希望它显示在命令行中

Traceback (most recent call last):
  File "test.py", line 88, in <module>
    p.feed(ht)
  File "/usr/lib/python2.5/HTMLParser.py", line 108, in feed
    self.goahead(0)
  File "/usr/lib/python2.5/HTMLParser.py", line 148, in goahead
    k = self.parse_starttag(i)
  File "/usr/lib/python2.5/HTMLParser.py", line 226, in parse_starttag
    endpos = self.check_for_whole_start_tag(i)
  File "/usr/lib/python2.5/HTMLParser.py", line 301, in check_for_whole_start_tag
    self.error("malformed start tag")
  File "/usr/lib/python2.5/HTMLParser.py", line 115, in error
    raise HTMLParseError(message, self.getpos())
HTMLParser.HTMLParseError: malformed start tag, at line 319, column 25

如何抑制错误?

python exception error-handling html-parsing
5个回答
12
投票

捕获 HTMLParseError 对你不起作用吗?如果

test.py
是你的 python 文件的名称,它会传播到那里,所以它应该。

这是一个如何抑制此类错误的示例。您可能需要稍微调整它以匹配您的代码。

try:
    # Put parsing code here
except HTMLParseError:
    pass

您也可以通过将 stderr 重定向到 null 来抑制错误消息,就像 Ignacio 建议的那样。要在代码中执行此操作,您只需编写以下内容即可:

import sys

class DevNull:
    def write(self, msg):
        pass

sys.stderr = DevNull()

但是,这可能不是您想要的,因为从您的错误来看,脚本执行似乎已停止,而您可能希望继续执行。


8
投票

将 stderr 重定向到

/dev/null

python somescript.py 2> /dev/null

7
投票

在 python 3 中,@Boaz Yaniv 的答案可以简化为

sys.stderr = object

由于python3中的每个类都是继承自

Object
,所以从技术上来说这是可行的,至少我自己在python 3.6.5环境中尝试过。


7
投票

这是一个更易读、更简洁的解决方案,用于处理可以安全忽略的错误,而不必求助于典型的 try/ except/pass 代码块。

from contextlib import suppress

with suppress(IgnorableErrorA, IgnorableErrorB):
    do_something()

0
投票

有很多令人惊奇的答案,我最近有一个要求,我想抑制终端中打印的错误,并且还应该启用输入,我发现的最简单的方法如下。

import sys
def supressErrors(*args):
    pass

suppressionHandle = sys.stderr
sys.stderr = supressErrors()
print("Testing print 1/0")
print(1/0) #Nothing will be printed in the terminal

sys.stderr = suppressionHandle
print(1/0) # You can see an exception in the terminal
© www.soinside.com 2019 - 2024. All rights reserved.