简单的Python语法错误:语法无效

时间:2015-08-27 02:04:46

标签: python syntax

def cube(number):
    return number * number

def by_three(number):
    if number % 3 == 0:
        return cube(number)
        print "%d is divisible by 3" (number)
else: 
    return False

错误讯息:

  File "python", line 8
    else:
       ^
SyntaxError: invalid syntax

3 个答案:

答案 0 :(得分:2)

Python是一种基于缩进的语言,与基于块分隔符的语言(如C或Pascal)不同。您在else上的缩进必须与if的缩进相匹配。无论如何,我不是这个结构的忠实粉丝:

if condition:
    return
else:
    do something

如果条件为真,那么你返回的事实意味着之后的所有代码都是自动 else子句,所以你可以放弃它:

if condition:
    return
do something

此外,在您之后,您无法在by_three 中打印任何内容,因为您已经返回了一个值,因此您需要整理您的订单那里的陈述。

而且,对于字符串格式化,%运算符的存在至关重要。

考虑到所有这些,您可能想尝试:

def cube(number):
    return number * number

def by_three(number):
    if number % 3 == 0:
        print "%d is divisible by 3" % (number)
        return cube(number)
    return False

答案 1 :(得分:1)

Python对空白区域敏感,因此您的else块必须与if块具有相同的缩进。另外,为了实际看到print语句,必须在调用print函数后返回,否则函数将在调用print之前返回,并且您将看不到任何输出。请尝试下面的代码。它还使用Python 3的格式函数来格式化字符串。

<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<audio class="my-audio-player" controls></audio>

答案 2 :(得分:1)

首先,您需要知道, indention是Python 中语法的一部分,它出现在语言ABC之后,就像@paxdiablo提到的那样。

但实际上,正如我所知,Python中的else可以匹配iftry-exceptfor。但在您的情况下,elsedef处于同一级别,但与iftry-catchfor中的任何一个都不匹配。因此,会发生语法错误。

更详细,下面是三个例子:

if 1==1:
    print "1 is equal to 1"
else:
    print "1 is not equal to 1"

第二

try:
    raise Exception("Raise some exception")
except Exception as e:
    print e
else:
    print "No exception occured!"

最后:

list_ = range(10)
for i in list_:
    if i == 10:
        break
    print(i)
else:
    print('10 is not in list_')