Python:抑制转到命令行的错误?

use*_*879 5 python error-handling exception-handling html-parsing

当我尝试从命令行执行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
Run Code Online (Sandbox Code Playgroud)

我怎么能抑制错误?

Sea*_*yue 7

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

sys.stderr = object
Run Code Online (Sandbox Code Playgroud)

由于 python3 中的每个类都是继承自Object,所以从技术上讲这是可行的,至少我自己在 python 3.6.5 环境中尝试过。


Ign*_*ams 6

将stderr重定向到/dev/null.

python somescript.py 2> /dev/null
Run Code Online (Sandbox Code Playgroud)


Boa*_*niv 6

不能捕获HTMLParseError吗?如果test.py是你的python文件的名称,它会传播到那里,所以它应该.

这是一个如何抑制这种错误的例子.您可能需要调整一下以匹配您的代码.

try:
    # Put parsing code here
except HTMLParseError:
    pass
Run Code Online (Sandbox Code Playgroud)

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

import sys

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

sys.stderr = DevNull()
Run Code Online (Sandbox Code Playgroud)

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


Gre*_*con 6

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

from contextlib import suppress

with suppress(IgnorableErrorA, IgnorableErrorB):
    do_something()
Run Code Online (Sandbox Code Playgroud)