为什么Python显示错误:无法分配给运算符?

时间:2019-08-24 10:45:31

标签: python

from datetime import datetime
now = datetime.now()
q = int(now.strftime('%I'))
w = int(now.strftime('%M'))

def correct_time(delta):
    if w < (120 - delta):
        Q = q + 1 and W = w + (delta - 60)
    else:
        Q = q + 2 and W = w + (delta - 120)
    return Q, W

correct_time(45)

#gives error - SyntaxError: can't assign to operator

在上面的代码中,我试图为q和W分别分配q和w的新值。当我仅尝试将新值分配给Q或W(不在同一行中都分配给这两个值)时,我没有收到错误,但是当我使用'and'(如上述情况)或'时,却收到了这样的错误。

我在互联网上搜索了“无法分配给操作员”错误,但发现它们与我的案子无关。我想知道为什么上面的代码遵循分配规则时会显示错误。

3 个答案:

答案 0 :(得分:2)

我们都知道只有expression and expression是有效的。因此,这里的意思是在Python中,assignment只是statement,而不是expression。在C中,a = 3assignment expression,而a = 3 && b = 4是有效的。但是,这在Python中无效。

Python在3.8中将有自己的assignment expressionPEP 572 -- Assignment Expressions | Python.org

在Python3.8中,您将能够执行以下操作:

# This block code only works with Python3.8+
from datetime import datetime
now = datetime.now()
q = int(now.strftime('%I'))
w = int(now.strftime('%M'))

def correct_time(delta):
    if w < (120 - delta):
        (Q := q + 1) and (W := w + (delta - 60))
    else:
        (Q := q + 2) and (W := w + (delta - 120))
    return Q, W

correct_time(45)

但是,这不是必需的,因为您可以在Python中执行以下操作:

a, b = 1, 2

等于

a = 1
b = 2

答案 1 :(得分:1)

您的代码应为:

def correct_time(delta):
    if w < (120 - delta):
        Q = q + 1
        W = w + (delta - 60)
    else:
        Q = q + 2
        W = w + (delta - 120)
    return Q, W

在类似a = 1 and b = 2的表达式中,Python首先会尝试将值2分配给a and b,这是不可能的,并且会产生错误SyntaxError: can't assign to operator。您将得到与a = 1 = 2类似的东西:在这里,尝试将2分配给1会产生SyntaxError: can't assign to literal

答案 2 :(得分:0)

您要查找的是以下语法:

def correct_time(delta):
    if w < (120 - delta):
        Q, W = q + 1, w + (delta - 60)
    else:
        Q, W = q + 2, w + (delta - 120)
    return Q, W

在您的情况下,它不起作用,因为右手应该是表情,但它是 expressionstatement(由于分配)。