问题
I am working on a small program that reads data from a CSV file. As part of the program, user input is used to only select data that >= but I get TypeError: unorderable types: str() >= int() when I run the code. Looks like the sting is not converting to integer.
def get_csv_data(data_type, num):
import csv
ga_session_data = {}
ga_pageviews_data = {}
with open('files/data.csv', 'r') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
page, sessions, pageviews = row
ga_session_data[page] = int(sessions)
ga_pageviews_data[page] = int(pageviews)
if data_type == 'sessions' and sessions >= int(num):
for page, sessions in ga_session_data.items():
print(page, ' - ', sessions)
elif data_type == 'pageviews' and pageviews >= int(num):
for page, pageviews in ga_pageviews_data.items():
print(page, ' - ', pageviews)
def main():
while(True):
question = input("Are you interested in sessions or pageviews?")
if question == 'sessions':
number = int(input("What range are you interested in?"))
get_csv_data(data_type = 'sessions', num = int(number))
elif question == 'pageviews':
number = input("What range are you interested in?")
get_csv_data(data_type = 'pageviews', num = int(number))
else:
print("Invalid Input. Choose between sessions and pageviews.")
main()
回答1:
int does not cast its parameters to integer in-place. In fact those parameters are immutable.
int(sessions) does not exactly do what you think it does. session is not modified, but the return value of that call is an int.
You should assign the returned value to a new/same name:
sessions = int(sessions)
pageviews = int(pageviews)
The operator >= can now compare the two variables you have, since they are now both integers.
You may also want to rewrite that if block like so:
if data_type == 'sessions':
for page, sessions in ga_session_data.items():
if sessions >= int(num):
print(page, ' - ', sessions)
In this way, you're actually checking the sessions count in the dictionary and not the sessions from the for loop.
来源:https://stackoverflow.com/questions/38642339/python-3-int-function-is-not-converting-input-string-to-integer