-1

我被 Python if 语句困住了。我几乎完成了所有工作,但是在运行我的 progarmm 时,它在第一行给出了一个语法错误:我很确定我做的一切都是正确的,但是由于我对 Python 和编程非常陌生,它可能只是一个非常愚蠢的错误...感谢您的帮助!

if a == 2:   
StartDeckNeighbourright = StartDeck[a + 1]
StartDeckNeighbourright2 = StartDeck[a + 2]
4

3 回答 3

9

如果这不是IndentationErrorjramirez 的答案所修复的,而是实际的,则可能是语句之前SyntaxError行有问题。if

在 Python 中,只要表达式在括号内,就可以跨多行继续表达式。因此,如果您)在函数调用、元组或其他任何内容的末尾不小心遗漏了 a,您通常会在下一行得到一个神秘SyntaxError的字符。例如,这段代码:

foo = (1, 2
if a == 2:
    pass

…会给出这个错误:

    if a == 2:
             ^
SyntaxError: invalid syntax

只需添加另一个逗号,就会将错误移动到不同的地方!

foo = (1, 2,
if a == 2:
    pass

    if a == 2:
     ^
SyntaxError: invalid syntax

为什么?好吧,即使您确切了解这些错误的含义,它们仍然没有多大帮助。所以首先,记住:

如果您SyntaxError在完全有效的行上得到 a ,请在上面的行中查找缺失的)(或]},或额外的\,或其他一些特殊情况)。

如果你能得到一个可以帮助你匹配括号和括号的编辑器,那么这个问题的可能性就会大大降低。(例如,使用 emacs,至少按照我的设置方式,它会自动尝试if为我缩进第 7 行字符,如果我“修复”它,它会反击我,最终它'很难不注意到有什么问题。然后我指着第一个(,它告诉我它是无与伦比的。)

但如果你想知道,这里是:

第一个版本使用 value 构建一个元组,然后是一个从下一行1开始并继续的值。对于三元表达式来说是一个非常好的开始,但不是;冒号强制它成为一个语句,并且您不能将语句放在表达式的中间。22 if a == 2if2 if a == 2:if

第二个版本构建一个元组,其中 value 1、 value2和更多值在下一行继续。if不能是任何有效表达式的开始,所以你得到SyntaxError更早的。但是,当然,还不够早到有用。

于 2013-11-01T23:18:10.480 回答
3

您应该发布您看到的错误,但是我认为您需要的只是 if 语句之后的缩进

if a == 2:   
    StartDeckNeighbourright = StartDeck[a + 1]
    StartDeckNeighbourright2 = StartDeck[a + 2]
---- four spaces of indentation
于 2013-11-01T23:04:48.133 回答
0

在 python 中你必须使用缩进:

if a == 2:
    StartDeckNeighbourright = StartDeck[a + 1]
    StartDeckNeighbourright2 = StartDeck[a + 2]
于 2013-11-01T23:08:37.760 回答