DEV Community

Cover image for How to fix "SyntaxError: cannot assign to expression here" in Python
Reza Lavarian
Reza Lavarian

Posted on • Originally published at decodingweb.dev

How to fix "SyntaxError: cannot assign to expression here" in Python

Update: This post was originally published on my blog decodingweb.dev, where you can read the latest version for a 💯 user experience. ~reza

Python raises “SyntaxError: cannot assign to expression here. Maybe you meant ‘==’ instead of ‘=’?” when you assign a value to an expression. On the other hand, this error occurs if an expression is the left-hand side operand in an assignment statement.

a = 12
b = 2

# 🚫 SyntaxError
a * b = c
Enter fullscreen mode Exit fullscreen mode

Additionally, Python provides you a hint, assuming you meant to use the equality operator (==):

File /dwd/sandbox/test.py, line 5
    a * b = c
    ^^^^^
SyntaxError: cannot assign to expression here. Maybe you meant '==' instead of '='?
Enter fullscreen mode Exit fullscreen mode

But what's an expression? You may ask.

The term "expression" refers to values or combination of values (operands) and operators that result in a value. That said, all the following items are expressions:

  • 'someValue'
  • 12 * 2
  • 4 * (5 + 2)
  • 'someText' + 'anotherText'

Most of the time, the cause of the "SyntaxError: cannot assign to expression here" error is a typo in your code - usually a missing = or invalid identifiers in assignment statements.

How to fix "SyntaxError: cannot assign to expression here"

The long error "SyntaxError: cannot assign to expression here. Maybe you meant '==' instead of '='?" occurs under various scenarios:

  1. Using an invalid name (identifier) in an assignment statement
  2. Using = instead of == in a comparison statement

Let's see some examples.

Using an invalid name (identifier) in an assignment statement: Assignment statements bind names to values. (e.g., total_price = 49.99)

Based on Python syntax and semantics, the left-hand side of the assignment operator (=) should always be an identifier, not an expression or a literal.

Identifiers (a.k.a names) are arbitrary names you use for definitions in the source code, such as variable names, function names, and class names. For instance, in the statement age = 25, age is the identifier.

Python identifiers are based on the Unicode standard annex UAX-31, which describes the specifications for using Unicode in identifiers.

That said, you can only use alphanumeric characters and underscores for names. Otherwise, you'll get a SyntaxError. For instance, 2 + 2 = a is a syntax error because the left-hand side operator isn't a valid identifier - it's a Python expression.

A common mistake which results in this syntax error is using hyphens (-) in your variable names.

Hyphens are only valid in expressions like 45.54 - 12.12. If you have a '-' in your variable name, Python's interpreter would assume it's an expression:

# 🚫 SyntaxError
total-price = 49.45
Enter fullscreen mode Exit fullscreen mode

In the above code, Python's interpreter assumes you're trying to subtract a variable name price from another variable named total.

And since you can't have an expression as a left-hand side operand in an assignment statement, you'll get this SyntaxError.

So if your code looks like the above, you need to replace the hyphen (-) with an underscore (_):

# ✅ a valid identifier contains alphanumeric characters and underscores
total_price = 49.45
Enter fullscreen mode Exit fullscreen mode

That's much better!

Invalid comparison statement : Another cause of "SyntaxError: cannot assign to expression here" is using an invalid sequence of comparison operators while comparing values.

This one is more of a syntax-related mistake and rarely finds its way to the runtime, but it's worth watching.

Imagine you want to test if a number is an even number. As you probably know, if we divide a number by 2, and the remainder is 0, that number is even.

In Python, we use the modulo operator (%) to get the remainder of a division:

x = 45

# Checking if x is an even number
# But Python raises:
# 🚫 SyntaxError: cannot assign to literal here. Maybe you meant '==' instead of '='?
if x % 2 = 0:
    print('x is even!')
Enter fullscreen mode Exit fullscreen mode

In the above code, once Python encounters the assignment operator (=), it assumes we're trying to assign 0 to x % 2! No wonder the response is "SyntaxError: cannot assign to expression here. Maybe you meant '==' instead of '='?".

But once we use the equality operator (==), the misconception goes away:

x = 34

# Checking if x is an even number
if x % 2 == 0:
    print('x is even!')

# Output: x is even!
Enter fullscreen mode Exit fullscreen mode

Problem solved!

Alright, I think it does it. I hope this quick guide helped you solve your problem.

Thanks for reading.

❤️ You might like:

Top comments (0)