PyCharm的类型警告: Expected type ‘SupportsWrite[bytes]‘, got ‘BinaryIO‘ instead
记录时使用的PyCharm版本:
PyCharm 2024.3 (Professional Edition)
Build #PY-243.21565.199, built on November 13, 2024
问题描述
当在PyCharm里使用pickle
保存文件, 比如以下代码这样:
with open(meta_save_path, 'wb') as f:
pickle.dump(meta, f)
会发现PyCharm对此发出类型警告: Expected type 'SupportsWrite[bytes]', got 'BinaryIO' instead
. 如下图这样:
解决
放心, 这不是你的问题, 而是专属于PyCharm的锅. 只需要添加# noinspection PyTypeChecker
这行注释在警告的代码上即可:
with open(meta_save_path, 'wb') as f:
# noinspection PyTypeChecker
pickle.dump(meta, f)
注: 虽然你也可以使用诸如
typing.cast
这样的方法来防止PyCharm报错, 但既然这段代码本身没问题, 只是PyCharm自身的误报, 那么这种"改正"也没什么道理.
参考
[1] https://stackoverflow.com/a/79049514/9532112
[2] https://youtrack.jetbrains.com/issue/PY-76404/Spurious-Expected-type-SupportsWritebytes-got-BinaryIO-instead-with-pickle.dump