我可以解码(errors ="ignore")Python 2.7程序中所有字符串的默认值吗?

Pau*_*man 8 python decode python-2.7

我有一个Python 2.7程序,可以从各种外部应用程序中写出数据.当我写入文件时,我不断被异常所困,直到我添加.decode(errors="ignore")到写出的字符串.(FWIW,打开文件mode="wb"并不解决此问题.)

有没有办法说"忽略此范围内所有字符串的编码错误"?

Sve*_*ach 12

您无法在内置类型上重新定义方法,也无法将errors参数的默认值更改为str.decode().但是,还有其他方法可以实现所需的行为.

更好的方法:定义自己的decode()功能:

def decode(s, encoding="ascii", errors="ignore"):
    return s.decode(encoding=encoding, errors=errors)
Run Code Online (Sandbox Code Playgroud)

现在,你需要打电话decode(s)而不是s.decode(),但这不是太糟糕,不是吗?

hack:您无法更改errors参数的默认值,但您可以覆盖默认值的处理程序errors="strict":

import codecs
def strict_handler(exception):
    return u"", exception.end
codecs.register_error("strict", strict_handler)
Run Code Online (Sandbox Code Playgroud)

这将基本上改变errors="strict"标准"ignore"行为的行为.请注意,这将是一个全局更改,会影响您导入的所有模块.

我建议不要这两种方式.真正的解决方案是让你的编码正确.(我很清楚这并不总是可行的.)


phk*_*phk 5

正如我在关于该问题线程中所提到的,即使没有新函数,Sven Marnach的 hack也是可能的:

import codecs
codecs.register_error("strict", codecs.ignore_errors)
Run Code Online (Sandbox Code Playgroud)