Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyCharm程序化____;生成和语法高亮显示_Python_Pycharm_Static Analysis - Fatal编程技术网

Python PyCharm程序化____;生成和语法高亮显示

Python PyCharm程序化____;生成和语法高亮显示,python,pycharm,static-analysis,Python,Pycharm,Static Analysis,我正在使用此装饰器以一种干燥的方式管理\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu def export(obj): mod = sys.modules[obj.__module__] if hasattr(mod, '__all__'): mod.__all__.append(obj.__name__) else: mod.__all__ = [obj

我正在使用此装饰器以一种干燥的方式管理
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

def export(obj):
    mod = sys.modules[obj.__module__]
    if hasattr(mod, '__all__'):
        mod.__all__.append(obj.__name__)
    else:
        mod.__all__ = [obj.__name__]

    return obj
对于使用
import*
PyCharm导入的名称,会发出
未解析引用
错误,这是可以理解的,因为它在分析之前不会运行代码。但这显然是一个不便之处

你将如何解决它(或者可能已经解决)

我的假设:

  • 添加一些自动linter插件或修改现有PyCharm的检查代码都可以
  • 实际上正在编辑
    .py
    源代码的东西是可行的,但并不好
  • 这种方法可能不是最好的方法,因此建议采用另一种方便的出口处理方法也不错

您可能对另一种管理
\uuuuuu all\uuuuuuu
的方法感兴趣:

这提供了一个
start\u all()
end\u all()
函数,用于将要访问的项目放置在模块中。这种方法适用于PyCharms代码检查

from auto_all import start_all, end_all

# Imports outside the start and end function calls are not included in __all__.
from pathlib import Path

def a_private_function():
    print("This is a private function.")

# Start defining externally accessible objects.
start_all(globals())

def a_public_function():
    print("This is a public function.")

# Stop defining externally accessible objects.
end_all(globals())
我觉得这是一种合理的管理
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。该包的源代码很小,因此如果需要,可以很容易地直接包含在代码中,以避免外部依赖


我之所以使用它,是因为我有一些模块,其中许多项目需要“导出”,并且我希望将导入的项目排除在导出列表之外。我有多个开发人员在处理代码,很容易添加新项目,而忘记将它们包含在
\uuu all\uuuu
中,因此自动化这很有帮助。

可以使用pyi存根,请参见和@user2235698这是一个很好的方法!您能否建议一些方法来自动更新这个存根,并提供一个py、pyi文件及其用法的简单示例(看看您的想法应该如何工作)?我想勾选这个答案。我还没有看到足够好的工具来自动更新存根,你们可以从手动更新存根开始,让它们更精确。这可能是一个很好的例子,大多数过梁都支持这样的短柱。好吧,仍然不是很适合过梁,但我想项目最终会达到这个目的。现在,这是最接近完美的解决方案,谢谢分享!