Python 3 int() function is not converting input string to integer

做~自己de王妃 提交于 2019-12-31 03:54:13

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!