语法错误:带有变量注释的语法无效



我已经安装了Visual Studio Code和code runner扩展。然后我有这段代码:

text: str = "slkdfjsd"

我点击CTRL-ALT-N,得到:

text: str = "slkdfjsd"
^
SyntaxError: invalid syntax

我喜欢使用类型,而且这个程序有效,看起来它抱怨类型如何让我了解类型是可以的?

更多详情:

$ /usr/bin/env python3 --version
Python 3.6.6 :: Anaconda, Inc.

当它运行时:

[Running] /usr/bin/env python3 "/home/myuser/dev/projects/python-snippets/text-summarization"
File "/home/myuser/dev/projects/python-snippets/text-summarization", line 44
text: str = "slkdfjsd"
^
SyntaxError: invalid syntax

代码运行器插件文档 说:

$pythonPath: Python 解释器的路径(由Python: Select Interpreter command设置(

但是当我按照注释建议运行打印路径时,我得到了不同的版本:

sys.version_info(major=3, minor=5, micro=2, releaselevel='final', serial=0)

正如您在上面看到的与我选择的>python: select interpreter不同。

另请注意,当我在 Visual Studio 代码中使用终端运行而不是CTRL-ALT-N时,选择的 python 版本是 3.6,它运行良好,没有任何语法错误,所以我认为这是代码运行器没有看到与我在选择>python: select interpreter时看到的相同的 python 版本

更新:我确实看到代码运行器使用了错误的 python 解释器,如上所述,所以我打开了我的用户设置并尝试更新python以指向正确的解释器,但它没有改变任何东西它仍然使用相同的错误解释器这是我尝试过的:

{
"git.autofetch": true,
"terminal.integrated.rendererType": "dom",
"code-runner.executorMap": {
"javascript": "node",
"java": "cd $dir && javac $fileName && java $fileNameWithoutExt",
"c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"objective-c": "cd $dir && gcc -framework Cocoa $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"php": "php",
"python": "/home/user/home/user/dev/anaconda3/envs/pymachine/bin/python",
"perl": "perl",
"perl6": "perl6",
"ruby": "ruby",
"go": "go run",
"lua": "lua",
"groovy": "groovy",
"powershell": "powershell -ExecutionPolicy ByPass -File",
"bat": "cmd /c",
"shellscript": "bash",
"fsharp": "fsi",
"csharp": "scriptcs",
"vbscript": "cscript //Nologo",
"typescript": "ts-node",
"coffeescript": "coffee",
"scala": "scala",
"swift": "swift",
"julia": "julia",
"crystal": "crystal",
"ocaml": "ocaml",
"r": "Rscript",
"applescript": "osascript",
"clojure": "lein exec",
"haxe": "haxe --cwd $dirWithoutTrailingSlash --run $fileNameWithoutExt",
"rust": "cd $dir && rustc $fileName && $dir$fileNameWithoutExt",
"racket": "racket",
"ahk": "autohotkey",
"autoit": "autoit3",
"dart": "dart",
"pascal": "cd $dir && fpc $fileName && $dir$fileNameWithoutExt",
"d": "cd $dir && dmd $fileName && $dir$fileNameWithoutExt",
"haskell": "runhaskell",
"nim": "nim compile --verbosity:0 --hints:off --run"
}
}

但是,在更改它之后(也许我错了,我是vscode新手(,我仍然看到代码运行器正在运行它:

[Running] /usr/bin/env python3 "/home/myuser/dev/projects/python-snippets/text-summarization"

注意:以下答案假设您使用的是正确的版本(3.6+(,如果不是:简单地说,当前版本的 Python 不支持变量注释。


问题可能看起来像是类型注释导致了SyntaxError,但另一种非常合理的可能性是前面的行中有一个未闭合的括号或未闭合的东西。由于在文档中,它说:

解析器重复违规行并显示一个小"箭头" 指向行中错误所在的最早点 检测。该错误是由令牌引起的(或至少在令牌处检测到的(箭头前面

(强调我的(

仅当给定在该上下文中无效的令牌时,分析器才能检测未闭合的括号。由于括号和括号可以穿过多行(这意味着不会引发 EOL(,并且text是一个有效的变量标识符,因此只允许在括号或括号中使用冒号(当它用作参数时除外,它也接受类型注释(。

下面是托管在tio.run(SE代码高尔夫编译器(上的代码的可重现示例:

https://tio.run/##K6gsycjPM/7/X4OrJLWixEqhuKRIwVZBXf3/fwA

(
text: str = ''

:是该上下文中的第一个无效令牌。

File ".code.tio", line 2
text: str = ''
^
SyntaxError: invalid syntax

如果你有一个未闭合的字典,其中允许冒号,箭头将指向其他地方,因为text: str都是由开始{进行的有效令牌。指针将指向等号,因为这是第一个无效标记。

{
text: str = ''

例外情况:

File ".code.tio", line 2
text: str = ''
^
SyntaxError: invalid syntax

相关内容

  • 没有找到相关文章

最新更新