如何在不引发异常的情况下验证字节数组的解码?

Eri*_*lan 1 python character-encoding python-3.x

如果编码失败,有没有办法尝试解码字节数组而不引发错误?

编辑:解决方案不需要使用 bytearray.decode(...)。任何可以完成这项工作的库(最好是标准的)都会很棒。

注意:我不想忽略错误(我可以使用bytearray.decode(errors='ignore'))。我也不希望引发异常。例如,我希望函数返回 None。

my_bytearray = bytearray('', encoding='utf-8')

# ...
# Read some stream of bytes into my_bytearray.
# ...

text = my_bytearray.decode()
Run Code Online (Sandbox Code Playgroud)

如果 my_bytearray 不包含有效的 UTF-8 文本,最后一行将引发错误。

问题:有没有办法执行验证但不引发错误?

(我意识到引发错误被认为是“pythonic”。假设出于某些或其他充分的原因,这是不可取的。)

我不想使用 try-catch 块,因为此代码被调用了数千次,而且我不希望每次引发此异常时我的 IDE 都停止(而我确实希望它在出现其他错误时暂停)。

sna*_*erb 6

您可以使用抑制上下文管理器来抑制异常,并具有比 try/except/pass 稍微漂亮的代码:

import contextlib
...
return_val = None
with contextlib.suppress(UnicodeDecodeError):
    return_val = my_bytearray.decode('utf-8')
Run Code Online (Sandbox Code Playgroud)

  • 嗯,我认为没有办法防止解码抛出异常。老实说,如果问题是 IDE 暂停执行,我会看看是否可以重新配置 IDE(或在 IDE 外部运行代码)。 (3认同)