Ananth Upadhya
Ananth Upadhya

Reputation: 317

String comparison in Python3

I have a rest api which return True, False and "". Which i receive this in my requests.content I get the type as byte. I convert them to string and then try to compare. But the last else block executes leaving behind the first and second.

import requests
headers = {'Accept': '*/*'}
response = requests.get('http://{IP}/status', headers=headers)
status = response.content
status = str(status)
print(status)
# status returns "True", "False", ""
if (status == "True"):
    print ('Admin approved this request')
elif (status == "False"):
    print ('Admin disapproved this request')
else:
    print ('No response from admin')

Getting :- 'No response from admin' In all the cases

Upvotes: 0

Views: 387

Answers (2)

Sam
Sam

Reputation: 81

response.content is an object of type bytes.

Try calling decode() on response.content instead of casting to a str type.

For example if the content of the response is encoded in utf-8 then decode using utf-8:

status = response.content.decode('utf-8')

When casting a bytes object to a str type, the resulting string will be prefixed with "b'".

This is why the last else block in the code you've supplied always executes. The variable status will always be prefixed with "b'" (ie. "b'True'", "b'False'" or "b''") and the equality comparisons will always evaluate to False.

Upvotes: 1

Joyce Lee
Joyce Lee

Reputation: 386

Double check the format of your response. If it's in something like JSON, you'll likely need to access the actual response ("True", "False", "") as a key/value pair.

Also, you can simply use response.text to get a string using UTF-8 encoding, instead of converting response.content to a string. https://realpython.com/python-requests/#content

Upvotes: 1

Related Questions