[Solved] TypeError: ‘str’ Object Does Not Support Item Assignment

In this article, we will be discussing the TypeError:’str’ Object Does Not Support Item Assignment exception. We will also be going through solutions to this problem with example programs.

Why is This Error Raised?

When you attempt to change a character within a string using the assignment operator, you will receive the Python error TypeError: ‘str’ object does not support item assignment.

As we know, strings are immutable. If you attempt to change the content of a string, you will receive the error TypeError: ‘str’ object does not support item assignment.

There are four other similar variations based on immutable data types:

  • TypeError: 'tuple' object does not support item assignment
  • TypeError: 'int' object does not support item assignment
  • TypeError: 'float' object does not support item assignment
  • TypeError: 'bool' object does not support item assignment

Replacing String Characters using Assignment Operators

Replicate these errors yourself online to get a better idea here.

In this code, we will attempt to replace characters in a string.

myString = "PythonPool"
myString[0] = "p"
print(myString)

Output

str object does not support item assignment

Solution

Strings are an immutable data type. However, we can change the memory to a different set of characters like so:

myString = "PythonPool"

# same variable diff string stored in a diff memory location
myString = "pythonPool"

print(myString)

Output

pythonPool

TypeError: ‘str’ Object Does Not Support Item Assignment in JSON

Let’s review the following code, which retrieves data from a JSON file.

import json
with open('sample.json', 'r') as q:
    l = q.read()
    data = json.load(l)
    data['sample'] = '{}'
    data['sample]['content'] = 'PythonPool'

Output

TypeError: 'str' object does not support item assignment

Solution

In line 5, we are assigning data['sample'] to a string instead of an actual dictionary. This causes the interpreter to believe we are reassigning the value for an immutable string type.

import json
with open('sample.json', 'r') as q:
    l = q.read()
    data = json.load(l)
    data['sample'] = {}
    data['sample]['content'] = 'PythonPool'

TypeError: ‘str’ Object Does Not Support Item Assignment in PySpark

The following program reads files from a folder in a loop and creates data frames.

for yr in range (2014,2018):
  cat_bank_yr = sqlCtx.read.csv(cat_bank_path+str(yr)+'_'+h1+'bank.csv000',sep='|',schema=schema)
  cat_bank_yr=cat_bank_yr.withColumn("cat_ledger",trim(lower(col("sampleData"))))
  cat_bank_yr=cat_bank_yr.withColumn("category",trim(lower(col("SampleCategory"))))

Output

TypeError: 'str' object is not callable

Solution

This occurs when a PySpark function is overwritten with a string. You can try directly importing the functions like so:

from pyspark.sql.functions import col, trim, lower

TypeError: ‘str’ Object Does Not Support Item Assignment in PyMongo

The following program writes decoded messages in a MongoDB collection. The decoded message is in a Python Dictionary.

dthandler = lambda obj: (
    str(obj) 
    if isinstance(obj, Decimal)
    or isinstance(obj, datetime.time)
    else None
)

class Decoder(decoder.base.Base):


...
...
...
...
    try:

    ...
...
...

        x = json.dumps(context, default=dthandler)
        print x
        self.mongo_coll.insert(x) # ERROR LINE
    except errors.OperationFailure as op:
        print "Operation Exception"

   ..
...


        print '^^^^^'

Output

Serialization Exception (mongo/write.py)

'str' object does not support item assignment

Solution

At the 10th visible line, the variable x is converted as a string.

It’s better to use:

self.mongo_coll.insert(msg)

Please note that msg are a dictionary and NOT an object of context.

TypeError: ‘str’ Object Does Not Support Item Assignment in Random Shuffle

The below implementation takes an input main and the value is shuffled. The shuffled value is placed into Second.

from tkinter import *
import random


def randomize(a):
    Second.delete(0 , 'end')
    b = Main.get()
    c = random.shuffle(b)
    Second.insert(0 , c)

root = Tk()



Main = Entry(root)
Main.grid(row = 1,column = 0 , sticky = 'we')
...
...
...

Output

TypeError: 'str' Object Does Not Support Item Assignment

Solution

random.shuffle is being called on a string, which is not supported. Convert the string type into a list and back to a string as an output in Second

def randomize(a):
    Second.delete(0 , 'end')
    b = Main.get()
    c = list(b)
    random.shuffle(c) # Converted to a list
    Second.insert(0 , ''.join(c))

TypeError: ‘str’ Object Does Not Support Item Assignment in Pandas Data Frame

The following program attempts to add a new column into the data frame

import numpy as np
import pandas as pd
import random as rnd

df = pd.read_csv('sample.csv')

for dataset in df:
    dataset['Column'] = 1

Output

TypeError: 'str' object does not support item assignment

Solution

The iteration statement for dataset in df: loops through all the column names of “sample.csv”. To add an extra column, remove the iteration and simply pass dataset['Column'] = 1.

import numpy as np
import pandas as pd
import random as rnd

df = pd.read_csv('sample.csv')
dataset['Column'] = 1

FAQs

What are TypeErrors caused by?

These are the causes for TypeErrors:
– Incompatible operations between 2 operands:
– Passing a non-callable identifier
– Incorrect list index type
Iterating a non-iterable identifier.

What data types support item assignment?

The data types that support item assignment are:
– Lists
– Dictionaries
– and Sets
These data types are mutable and support item assignment

How can we avoid TypeErrors in the future?

As we know, TypeErrors occur due to unsupported operations between operands. To avoid facing such errors, we must:
– Learn Proper Python syntax for all Data Types.
– Establish the mutable and immutable Data Types.
– Figure how list indexing works and other data types that support indexing.
– Explore how function calls work in Python and various ways to call a function.
– Establish the difference between an iterable and non-iterable identifier.
– Learn the properties of Python Data Types.

Conclusion

We have looked at various error cases in TypeError:’str’ Object Does Not Support Item Assignment. Solutions for these cases have been provided. We have also mentioned similar variations of this exception.

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments