How to fix "SyntaxError: cannot assign to literal here" in Python
Tags: python, programming
Published: 2023-02-02 19:46:37

> ✋ **Update:** This post was originally published on my blog [decodingweb.dev](https://www.decodingweb.dev), where you can read the [latest version](https://www.decodingweb.dev/solved-syntaxerror-cannot-assign-to-literal-here-in-python) for a 💯 user experience. _~reza_

Python raises “SyntaxError: cannot assign to literal here. Maybe you meant ‘==’ instead of ‘=’?” when you assign a value to a literal (e.g., `12`, `'49.5'`, `'Sally'`). On the other hand, this error occurs if a literal value is the left-hand side operand in a value assignment:


```python
# 🚫 Raises SyntaxError
12 = 'Hi I am the value being assigned to 12!'
```

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

```
File /dwd/sandbox/test.py, line 2
    12 = 'Hi I am the value being assigned to 12!'
    ^^
SyntaxError: cannot assign to literal here. Maybe you meant '==' instead of '='?
```

But what's a literal? You may ask. 

The term "literal" refers to an actual value in the source code. All the following values are literals:

- `'someValue'`
- `12.5`
- `23`
- `True`

Most of the time, the reason is a typo in your code - usually a missing `=` or invalid syntax in assignment statements.

## How to fix "SyntaxError: cannot assign to literal here"

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

1. <u>Wrong left-hand side operand in an assignment statement</u>
2. <u>Multiple value assignments on a single line</u>
3. <u>In valid comparison statement</u>

Let's see some examples.

**Wrong left-hand side operand in an assignment statements:** Assignment statements bind names to values. (e.g., `price = 49.99`)

Based on Python [syntax and semantics](https://www.decodingweb.dev/how-to-learn-a-programming-language#language-syntax-and-semantics), the left-hand side of the assignment operator (`=`) should always be an identifier, not a literal value.

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't have a literal value (e.g. `12`, `45.9`, `'stringValue'`) as the identifier, otherwise, you'll get the "SyntaxError: cannot assign to literal here. Maybe you meant '==' instead of '='?" error. 

```python
# 🚫 Raises SyntaxError
'age' = 12
4.9 = score
```

So if your code looks like the above, here's how to fix it:

```python
# ✅ Correct value assignment
age = 12
score = 4.9
```

**Multiple value assignments on a single line:** This is more affecting Python 2.7 users since Python 3 outputs a different error message. On Python 2.7, you'll get the "SyntaxError: can't assign to literal" error, if you initialize your variables like so:

```python
# Raises SyntaxError: can't assign to literal
x = 12, y = 45
```

To fix the issue, you need to change your code like so:

```python
# ✅ Correct way of having multiple assignments on a single line
x, y = 12, 45
```

Alternatively, you can use semi-colons (`;`) to have multiple assignment statements on a single line:

```python
# ✅ Correct way of having multiple assignments on a single line
x = 12; y = 45
```

**Invalid comparison statement:** Another cause of "SyntaxError: cannot assign to literal 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 check if age is between `12` and `25` (`12 <= age < = 25`), however, you miss one of the `<` operators:

```python
age = 12

# 🚫 Raises SyntaxError
if 12 = age <= 25:
    print('User is eligible')
```

In the above code, once Python's interpreter encounters the first `=`, it assumes you're trying to assign age to `12` (`=` is a value assignment operator).

Once we add the missing `<`, the misconception goes away:

```python
age = 12

# ✅ Correct sequence
if 12 <= age <= 25:
    print('User is eligible')
```

Problem solved!

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

Thanks for reading.

❤️ **You might like:**

[SyntaxError: invalid decimal literal in Python (Solved)](https://www.decodingweb.dev/python-syntaxerror-invalid-decimal-literal-fix)
[TypeError: ‘str’ object is not callable in Python (Fixed)](https://www.decodingweb.dev/python-typeerror-str-object-is-not-callable-fix)
[How to fix "TypeError: ‘float’ object is not callable" in Python](https://www.decodingweb.dev/python-typeerror-float-object-is-not-callable-fix)
[TypeError: 'int' object is not callable in Python (Fixed)](https://www.decodingweb.dev/python-typeerror-int-object-is-not-callable-fix)