Search code examples
pythontypesdecodeurllib

What is the difference between <class 'str'> and <type 'str'>


I am new to python. I'm confused by the <class 'str'>. I got a str by using:

response = urllib.request.urlopen(req).read().decode()

The type of 'response' is <class 'str'>, not <type 'str'>. When I try to manipulate this str in 'for loop':

for ID in response: 

The 'response' is read NOT by line, BUT by character. I intend to put every line of 'response' into individual element of a list. Now I have to write the response in a file and use 'open' to get a string of <type 'str'> that I can use in 'for loop'.


Solution

  • As mentioned by the commenters. In python3:

    >>>st = 'Hello Stack!'
    >>>type(st)
    <class 'str'>
    

    But in python2:

    >>>st = 'Hello Stack!'
    >>>type(st)
    <type 'str'>
    

    So the behavior that you are seeing is entirely expected. As to looping over a string, a for loop over a string will iterate over the string character by character. If you want to iterate over each line in the string, you usually do something like split on \n or some regex designed to split on the line separators in the URL response. Below is a simple for loop over the list resulting from split

    response = urllib.request.urlopen(req).read().decode()
    lines = response.split('\n')
    for x in lines:
        st = x.strip()
        # do some processing on st