PyCharm - 期望类型为 'Optional[IO[str]]',实际得到的是 'TextIOWrapper[str]'

16

在将PyCharm更新到2017.1版本后,一个新的检查警告开始在一个看似简单和正确的地方弹出。它看起来如下:

Screenshot

似乎open()函数返回的类型与file参数的期望类型不符,但代码非常简单明了,最重要的是它按照预期工作(使用Python 3.5.2)。 Python文档提到了一种使用StringIO的方法,并确实消除了警告,但这是否是指定print输出流的正确Python方式?如果是,为什么?遵循此警告是否重要?

3
这是一个已知的问题链接 - Michael Rael
1个回答

8
我找到的唯一解决方案是正确地使用PyCharm的类型提示:
from typing import IO

with open('output_filename', 'w') as f:  # type: IO[str]
    print('some text to go to the file...', file=f)

这样做可以让PyCharm更加愉快,而且不会对代码的正确运行产生任何影响。

2
“type: IO[str]”更有意义,仍然可以消除PyCharm警告。 - radzak
open 返回的类型不是文件吗?最好禁用 Python 类型检查,并在代码中添加一个指向 YouTrack 的链接注释:# noinspection PyTypeChecker

PyCharm 抱怨 f 不是文件类型,但这是一个已知的 bug:

https://youtrack.jetbrains.com/issue/PY-23288

- kroiz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接