【问题标题】:Python elif works in IDLE but not Visual Studio CodePython elif 适用于 IDLE,但不适用于 Visual Studio Code
【发布时间】:2020-06-13 15:13:39
【问题描述】:

我是 Python 新手,目前正在做我的第一个项目。

我的 elif 语句似乎在 IDLE 中有效,但在 VSC 中无效

为了演示,我有一个非常简单的 if 语句:

dud = 'You'
if dud == 'You':
    print('You got the dud!')
elif dud == 'Me':
    print('ohhhh, I made myself sad')
else:
    pass

当我将此代码提交给 IDLE 时,它没有问题。 但是,当我将完全相同的代码复制粘贴到 VSC 并在 Python 终端中运行时,会出现以下错误:

PS C:\Users\William> & C:/Users/William/AppData/Local/Programs/Python/Python38-32/python.exe
Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 22:39:24) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> dud = 'You'
>>> 
>>> if dud == 'you':
...     print('You got the dud!')
...
>>> elif dud == 'Me':
  File "<stdin>", line 1
    elif dud == 'Me':
    ^
SyntaxError: invalid syntax
>>>     print('ohhhh, I made myself sad')
  File "<stdin>", line 1
    print('ohhhh, I made myself sad')
    ^
IndentationError: unexpected indent
>>> else:
  File "<stdin>", line 1
    else:
    ^
SyntaxError: invalid syntax
>>>     pass
  File "<stdin>", line 1
    pass
    ^
IndentationError: unexpected indent
>>>

当然,我已经尝试了各种不同类型的格式,但我无法让它发挥作用。如果我删除 elif 部分,它可以正常工作,所以我觉得我一定缺少一些基本的东西。

任何帮助将不胜感激!

编辑:越来越奇怪的行为让我相信这在某种程度上是一个 Visual Studio 问题:

在“Python 交互窗口”中运行代码 = 新启动成功 VSC 并使用'在终端中运行 python 文件'=成功'运行 终端中的选择/行' = 上面运行时遇到的错误'运行 终端已经运行后终端中的python文件=错误 上面遇到过

edit:人们正确地指出,VSC 似乎在说添加了额外的行。 我不认为是这样:这是 VSC 中代码的屏幕截图

【问题讨论】:

  • print('You got the dud!') 之后有一个额外的换行符 - 这导致 python 终端结束 if 语句。所以你的elif 出现语法错误。
  • 我认为这是复制/粘贴问题。因此,尝试在 Visual Studio 中编辑代码,使用退格键并输入...
  • 题外话,但输出在哪里?您应该会在第二个 ... 之后看到 You got the dud!。 FWIW else 子句也无关紧要。顺便说一句,欢迎来到 Stack Overflow!查看tourHow to Ask
  • 大家好! VSC代码在这里:imgur.com/a/FGxAKZD
  • 如果你有一个 .py 文件,你不要将它复制/粘贴到 Python 终端。您通过启动启动调试器或 python 解释器。请参阅 VSC 调试页面了解如何设置 launch.json

标签: python visual-studio-code


【解决方案1】:

根据终端sn-p和截图,VSC实际运行的效果是这样的:

dud = 'You'

if dud == 'You':
    print('You got the dud!')

elif dud == 'Me':
    print('ohhhh, I made myself sad')
else:
    pass

问题是print('You got the dud!') 之后的第二个换行符。这让 Python 认为 if 语句已经完成,所以当它看到 elif 和后面的所有内容时,它会出错。

但问题的根源尚不清楚。

【讨论】:

  • 是的,我认为你是对的,但我不确定它为什么会这样解释。我这里有一个正在提交的代码的屏幕截图:imgur.com/a/FGxAKZD 这个问题有解决方法吗?
  • @William Huh,是的,截图看起来不错。我通常不使用 VSC,但我只是尝试重现该问题但无法重现。
  • 有趣!我只是在另一台计算机上尝试过,它在那里被复制了。
【解决方案2】:

注意...

 >>> elif

你已经开始了一个新的语句并结束了 if 语句

elif &lt;conditional&gt; 本身是无效的,因此下面的每一行都会被单独解释。

我建议使用 IPython 而不是常规的 python REPL,或者使用 JupyterLab

【讨论】:

  • 谢谢板球。是的,我从输出中看到代码是如何被解释的。但是,我不确定为什么它会根据代码本身被这样解释。详情请看帖子底部的截图。
  • 你用的是什么python插件? vs-code 代码应该作为一个完整的脚本来解释,而不是像 REPL 那样逐行解释。如果你已经粘贴或输入过,一定要注意左栏指示 continue 或 new 语句
  • 只有“Python”和“Jupyter”。我相信这一定与 VS 代码中的某些内容有关,因为将代码复制粘贴到 python 网络浏览器中似乎可以正常工作。
  • 我刚刚编辑了这篇文章,以扩展代码有时如何运行,有时如何不运行。我认为它一定是 VSC 中的某些东西,但不确定是什么。
  • 我建议将您的问题作为错误报告给 Python 插件维护者。另请注意,屏幕截图中的打印语句下面有一个红色的sgwiggle...我认为您应该在十六进制编辑器中打开该文件,因为那里显然有一些隐藏的空白字符
猜你喜欢
  • 2022-08-18
  • 2020-11-09
  • 1970-01-01
  • 2013-04-30
  • 2016-07-14
  • 1970-01-01
  • 2016-09-05
  • 2021-05-24
  • 2019-01-25
相关资源
最近更新 更多