如何在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显示了“未解决下参考pathnew_path = path / 'tmp'

显而易见,如果此类变量的类型是内置的,则不会发生这种情况。请注意,如果将导入from pathlib import Path并将其更改为def foo(path)则可以解决此问题def foo(path: Path)但是我想知道是否有任何方法可以在没有不必要的导入的情况下进行此操作。我读到有关Python输入的信息,但找不到解决方案。

bad_coder

在下面的示例中,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 > DocString Format

pycharm设置集成工具的图像

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Python中解析对变量的引用

如何在Typescript中定义自定义类型以防止“无法分配给类型...”

如何在YAML中正确引用JSON(带有变量)

如何在extjs中正确指定主题变量?

如何在TypeScript中正确更改变量的类型?

如何在 PyCharm 中正确导入 Python 包?

如何在文档字符串中为PyCharm解析器指定类或函数类型

如何在PyCharm中正确注释ContextManager?

如何在PyCharm中正确设置pipenv?

如何在Python中正确解析Git命令(`git log ...`)?

如何在循环中正确解析expss中的(?)mdset?

如何在python中正确解析文件,并将其内容保存到字典中

如何在 ZeroMQ python 中正确声明套接字类型?

如何在Laravel中正确解析网址?

如何在ConfigureServices()中正确解析实例?

如何在Java中设计类型安全的堆栈,以防止从空列表中弹出?

如何在Swift中正确声明变量?

如何在PHP中正确使用变量

如何在不同的类型注释中引用相同的类型变量?

如何在Python中动态引用变量?

如何在类中正确分配不同的变量而不影响它基于的类变量 [python]

如何在Node中的变量定义中正确调用多个环境变量

如何在Python中随机指定变量

如何在python中模拟pyplot.show(以防止显示情节)

如何在Chapel中声明对char **类型变量的外部引用?

如何在函数定义中引用存在类型变量?

如何在Go中解析其正确类型的JSON值?

处理复数和numpy时如何在python中正确指定dtype?

如何在yii2中正确指定迁移名称空间类?