TypeError: 'NoneType' Objekt ist in Python in csv nicht iterierbar

Ich bin neu in Python und versuche, ein Programm zu erstellen, das eine csv-Datei öffnet. Der Benutzer soll einen Barcode eingeben, dann findet das Programm das Produkt und die Kosten des Produktes. Allerdings habe ich einen Fehler, der der Titel meines Threads ist. Hier ist mein Code.

import csv # imports should go at the top of the file def read_csv_file(): """ reads csv data and appends each row to list """ csv_data = [] with open("task2.csv") as csvfile: spamreader = csv.reader(csvfile, delimiter=",", quotechar="|") for row in spamreader: csv_data.append(row) return csv_data def get_user_input(): """ get input from user """ while True: try: GTIN = int(input("input your gtin-8 number: ")) break except: print ("Oops! That was not a valid number. Try again") def search_user_input(): """ search csv data for string """ search_user_input gtin = get_user_input() for row in PRODUCT_DATA: #print(row) #debug print if row[0] == str(gtin): product = row[1] price = round(float(row[2]),2) print(product, price) return(product, price) repeat = input("not in there? search again? If so (y), else press enter to continue") if repeat == 'y': search_user_input() # calls function again in order to create a loop def quantity(): gtin = 0 product = 0 price = 0.0 product_data = read_csv_file() product,price = search_user_input() product, price = search_user_input(str(gtin), product_price) order = int(input("How much of " + product + " do you want?")) price = round(price * order, 2) print(quantity,price) def order_making(): print("Apples") PRODUCT_DATA = read_csv_file() # call function to read csv quantity() # call the main function 

  • Python-Lösung, um die Wiederholungen des Google-Kalenders zu analysieren
  • Wie kann man das SqlAlchemy-Ergebnis zu JSON serialisieren?
  • Wie habe ich Python pdb durcheinander gebracht?
  • ElementTree findall () zurückgeben leere Liste
  • Python - os.rename () - OSError: [WinError 123]
  • Gibt es eine Möglichkeit, GAE Benutzerobjekt und Google+ userid zuzuordnen
  • Python-Pandas: flach mit Arrays in Spalte
  • Verwenden Sie QAction ohne Hinzufügen zum Menü (oder Symbolleiste)
  • One Solution collect form web for “TypeError: 'NoneType' Objekt ist in Python in csv nicht iterierbar”

    Ich habe den Durchfluss ein bisschen für search_user_input und quantity gereinigt. In manchen Fällen search_user_input du search_user_input mit mehreren Argumenten an (es akzeptiert sie nicht) und du hast es rekursiv gemacht. Ich habe einige Kommentare in den unten stehenden Code hinzugefügt. In der Tat, diese Funktion kehrte None in Ihrem Setup, was führt zu der TypeError: 'NoneType' object is not iterable Fehler.

    Die if __name__ == '__main__:' ist in deinem Code nicht notwendig, ich habe es noch mehr als Heads-up für später aufgenommen, wenn du mit dem Import deiner eigenen Module beginnen möchtest. Sehen Sie dies für weitere Informationen zu diesem Thema.

     import csv def read_csv_file(): """ reads csv data and appends each row to list """ csv_data = [] with open("task2.csv") as csvfile: spamreader = csv.reader(csvfile, delimiter=",", quotechar="|") for row in spamreader: csv_data.append(row) return csv_data def get_user_input(): """ get input from user """ while True: try: GTIN = int(input("input your gtin-8 number: ")) return GTIN # Breaks the loop and returns the value except: print ("Oops! That was not a valid number. Try again") def search_user_input(product_data): # Pass the csv data as an argument """ search csv data for string """ keep_searching = True while keep_searching: gtin = get_user_input() for row in product_data: if row[0] == str(gtin): product = row[1] price = round(float(row[2]),2) return(product, price) repeat = input("not in there? search again? If so (y), else press enter to continue") if repeat != 'y': keep_searching = False return None # This is done implicitly, I'm just making it obvious def quantity(): product_data = read_csv_file() matches = search_user_input(product_data) if matches: # Will not be True if search_user_input returned None product, price = matches[0], matches[1] order = int(input("How much of {} do you want?".format(product))) price = round(price * order, 2) print("That costs {}".format(price)) if __name__ == '__main__': # You'll need this in future for importing modules # There was no need to read the csv_data here and make it global quantity() # call the main function 
    Python ist die beste Programmiersprache der Welt.