【问题标题】:anaconda+sublimetext, reports type hinting as errorsanaconda+sublimetext,将类型提示报告为错误
【发布时间】:2016-06-02 21:49:24
【问题描述】:

我在 sublimetext3 中有两个带有 anaconda 的 python 项目。由于一些神秘的原因,只有其中一个 anaconda 将类型提示 (PEP 0484) 报告为“无效语法”错误(对于参数和函数类型)。可能是什么原因?

【问题讨论】:

    标签: python sublimetext3 sublime-anaconda


    【解决方案1】:

    要扩展 @MattDMo 的答案,您可以通过按 Cmd/Ctrl+Shift+python3 解释器>P,然后选择:

    Anaconda: Set Python Interpreter

    然后粘贴到您的 python3 解释器的路径,您可以使用 which python3 找到它:

    如果您的代码在 virtualenv 中使用包,请确保放入您的 virtualenv 路径: /path/to/.virtualenvs/nameofvenv/bin/python3

    如果您不在 virtualenv 中,请使用系统的 python3:

    /usr/bin/python3 或 /usr/local/bin/python3 用于 mac 上的自制 python3。

    将其正确设置为 python3 应该可以修复类型注释上的 Invalid Syntax 错误。

    你也可以直接编辑你的项目文件来设置解释器路径:

    {
        "build_systems":
        [
            {
                "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
                "name": "Anaconda Python Builder",
                "selector": "source.python",
                "shell_cmd": "\"/path/to/.virtualenvs/venvname/bin/python3\" -u \"$file\""
            }
        ],
        "settings":
        {
            "python_interpreter": "/path/to/.virtualenvs/venvname/bin/python3"
        }
    }
    

    【讨论】:

      【解决方案2】:

      Anaconda 对PEP-484 类型提示的应用(受PEP-3107 函数注释和mypy 静态类型检查器的影响)仅适用于Python 3。我假设抛出错误的项目正在被Python 2 检测。

      【讨论】:

      • 对!我不知道它是怎么发生的,但就是这样。
      • 这其实是不正确的; PEP-484 类型提示也可以在 Python 2 中使用。请参阅 python.org/dev/peps/pep-0484/#type-comments 和 python.org/dev/peps/pep-0484/#stub-files 了解如何使其工作的两种方法。实际上,我现在正在使用类型提示将一个相当大的 Python 2 库移植到 Python 3。如果 Sublime Text 不知道,这是可能的,那么它对 PEP-484 的支持是不完整的,但这不是问题PEP-484。
      • @mcepl 这个答案在 OP 在 Sublime 中使用的 Anaconda 插件的上下文中是完全正确的。可以按照您的建议使用 cmets 或存根文件将类型提示/检查反向移植到 Py2,但是 PEP-484 中描述的原始 PEP-3107 函数注释描述和对它的扩展是特定于 Python 3 的。我已经更新了答案以反映这一点。
      • 好的,我会给你一票,但你仍然不完全正确。 mypy 可以测试 python2 程序(注意 --py2 开关)。问题仅在于 Sublime 实现(仅使用 Python 3 注释更容易,因为这样解析器在 ast 模块中是免费的)。
      • @mcepl 很高兴您在此处进行说明,希望它们也可以帮助其他一些用户。我会看看 Anaconda 的源代码,看看我是否可以提交 PR 或其他东西来解决这个问题。
      【解决方案3】:

      为了扩展@Nick Sweeting 的回答,值得记住的是,Type Hinting 是在 3.5 版中引入 Python 的,所以如果 Anaconda 使用任何以前版本的 Python3 的解释器,那么它会将 Type Hints 报告为无效的语法。要解决这个问题,只需将 python 解释器设置为 3.5 版本(或更高版本)。

      【讨论】:

        猜你喜欢
        • 2016-12-13
        • 1970-01-01
        • 2012-11-03
        • 2021-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-13
        • 2013-01-17
        相关资源
        最近更新 更多