未指定编码 (PLW1514)
源自 Pylint 代码检查工具。
修复总是可用的。
此规则不稳定且处于预览状态。使用需要 --preview
标志。
作用
检查在 open
和相关调用中是否使用了缺少显式 encoding
参数的情况。
为什么这不好?
在文本模式下使用 open
而没有显式指定编码可能会导致代码不可移植,在不同平台上行为不同。虽然读者可能认为 UTF-8 是默认编码,但实际上,默认编码是特定于语言环境的。
相反,考虑使用 encoding
参数来强制使用特定的编码。 PEP 597 建议使用 encoding="utf-8"
作为默认值,并建议它可能在未来版本的 Python 中成为默认值。
如果需要使用特定于语言环境的编码,请在 Python 3.10 及更高版本中使用 encoding="locale"
,或在更早版本中使用 locale.getpreferredencoding()
,以使编码显式。
修复安全性
此修复始终是不安全的,可能会更改程序的行为。它强制 encoding="utf-8"
作为默认值,而不管平台的实际默认编码如何,这可能会在非 UTF-8 系统上导致 UnicodeDecodeError
。
with open("test.txt") as f:
print(f.read()) # before fix (on UTF-8 systems): 你好,世界!
with open("test.txt", encoding="utf-8") as f:
print(f.read()) # after fix (on Windows): UnicodeDecodeError
示例
建议改为