如何解决如何在 Python 中正确指定变量的类型以防止 PyCharm 中的未解析引用?
我有一个功能:
def foo(path):
"""
:param path: Path to a folder
:type path: pathlib.Path
"""
new_path = path / 'tmp'
return new_path
获取一个 pathlib.Path
对象并在此路径的末尾添加“tmp”。但是 PyCharm 在 path
中的 new_path = path / 'tmp'
下显示了“未解析的引用”。
很明显,如果此类变量的类型是内置的,则不会发生这种情况。请注意,如果我导入 from pathlib import Path
并将 def foo(path)
更改为 def foo(path: Path)
,这可以解决。但我想知道是否有任何方法可以在没有不必要的导入的情况下做到这一点。我阅读了有关 Python 类型的信息,但找不到解决方案。
解决方法
在下面的示例中,PyCharm 确实发出警告 Unresolved reference 'Path'
,因为在注释中,类型提示 Path
的类型 argument_path
尚未从 pathlib
导入。对参数和变量都发出警告。
def foo(argument_path: Path):
"""
:param path: Path to a folder
:type path: Path
"""
new_path: Path = argument_path / 'tmp'
return new_path
解决此问题的显而易见的方法是在模块顶部使用 from pathlib import Path
。
from pathlib import Path
def foo(argument_path: Path):
new_path: Path = argument_path / 'tmp'
但我想知道是否有任何方法可以在没有不必要的导入的情况下做到这一点。
在没有导入的情况下,有两种方法可以做到这一点,要么使用注释中的完全限定名称 pathlib.Path
def foo(argument_path: pathlib.Path):
new_path: pathlib.Path = argument_path / 'tmp'
或者不使用类型注解,直接在文档字符串中指定类型。
如果您声明了无法在文档字符串中解析的类型,PyCharm 的静态类型检查器不会警告您。相反,当您尝试使用该函数时,PyCharm 会发出警告。在下面的示例中,签名或变量声明中没有使用类型提示,类型仅在文档字符串中指定。
def foo3(argument_path):
"""
:param argument_path: Path to a folder
:type argument_path: pathlib.Path
"""
new_path = path / 'tmp'
return new_path
# PyCharm will issue this warning:
foo3("a_string") # Expected type 'Path',got 'str' instead
最后,您在文档字符串中使用了 reStructuredText 语法,应在项目设置中指定此选项:Settings
>
Tools
>
Python Integrated Tools
{ {1}} >
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。