Python Elif适用于IDLE,但不适用于Visual Studio Code

时间:2020-02-29 21:56:10

标签: python visual-studio-code

我是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 Terminal中运行时,出现以下错误:

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文件” =成功'运行 选择/终端中的行'=上面运行'Run时遇到错误 终端已经运行后,终端中的python文件=错误 上面遇到的

edit:人们正确地指出,VSC似乎在说要添加额外的一行。 我认为情况并非如此:这是VSC中代码的屏幕截图

Description

2 个答案:

答案 0 :(得分:0)

根据终端代码段和屏幕截图,实际运行的VSC与此等效:

def sort(input_str: str) -> str:
    as_list = list(input_str)
    for idx in range(len(as_list), 0, -1)):
        if item == as_list[idx-1]:
            del as_list[idx]
    return ''.join(as_list)

问题是dud = 'You' if dud == 'You': print('You got the dud!') elif dud == 'Me': print('ohhhh, I made myself sad') else: pass 之后第二行中断。这使Python认为if语句已全部完成,因此当它看到print('You got the dud!')及其后的所有内容时,它将出错。

问题的根源尚不清楚。

答案 1 :(得分:0)

注意...

 >>> elif

您已经开始了一条新语句,并结束了if语句

elif <conditional>本身是无效的,因此下面的每一行都将被单独解释。

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