Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.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 水蟒&x2B;SublimiteText,报告类型提示为错误_Python_Sublimetext3_Sublime Anaconda - Fatal编程技术网

Python 水蟒&x2B;SublimiteText,报告类型提示为错误

Python 水蟒&x2B;SublimiteText,报告类型提示为错误,python,sublimetext3,sublime-anaconda,Python,Sublimetext3,Sublime Anaconda,我在SublimiteText3和anaconda中有两个python项目。出于某些特殊原因,其中只有一种情况下,anaconda报告类型暗示(PEP 0484)为“无效语法”错误(对于参数和函数类型)。原因是什么?Anaconda对类型提示的应用(受函数注释和静态类型检查器的影响)仅适用于Python 3。我假设抛出错误的项目正在被Python 2删除。要扩展Anaconda的答案,可以通过按Cmd/Ctrl+Shift+p,然后选择以下命令,强制Anaconda包使用python3解释器:

我在SublimiteText3和anaconda中有两个python项目。出于某些特殊原因,其中只有一种情况下,anaconda报告类型暗示(PEP 0484)为“无效语法”错误(对于参数和函数类型)。原因是什么?

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

要扩展Anaconda的答案,可以通过按Cmd/Ctrl+Shift+p,然后选择以下命令,强制Anaconda包使用
python3
解释器:

Anaconda:Set Python解释器

然后粘贴到python3解释器的路径中,您可以使用
哪个python3
找到该解释器:

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

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

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

将其正确设置为python3可以修复类型批注上的
无效语法
错误

您还可以直接编辑项目文件以设置解释器路径:

{
    "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"
    }
}

为了进一步说明Python的答案,值得记住的是,类型暗示是在3.5版中引入Python的,因此如果Anaconda在任何以前版本的Python3中使用解释器,那么它会将类型提示报告为无效语法。要解决这个问题,只需将python解释器设置为3.5版本(或更高版本)。

正确!我不知道它是怎么发生的,但就是这样。这实际上是不正确的;PEP-484类型提示也可以在Python 2中使用。有关如何使其工作的两种方法,请参见和。实际上,我现在正在使用类型提示将一个相当大的Python 2库移植到Python 3。如果升华文本不知道这是可能的,那么它对PEP-484的支持是不完整的,但这不是PEP-484的问题。@mcepl在升华中OP使用的Anaconda插件的上下文中,这个答案是完全正确的。按照您的建议,可以通过使用注释或存根文件将端口类型提示/检查返回到Py2,但是原始的PEP-3107函数注释描述和PEP-484中描述的扩展是特定于Python 3的。我更新了答案以反映这一点。好的,我会给你一票,但你仍然不是完全正确的。mypy可以测试python2程序(注意——py2开关)。问题完全出在Sublime实现中(只做Python 3注释比较容易,因为在ast模块中解析器是免费的)。@mcepl我很高兴您将说明放在这里,希望它们也能帮助其他用户。我会查看一下Anaconda的来源,看看是否可以提交一份PR或其他东西来解决这个问题。