2016-06-11 10 views
0

Ich habe keine Ahnung, was das bedeutet:Mehrfachzuordnung kehrt Betrieb Objekt ist nicht iterable

(success, admin_id) = login(email, password)

Die Login-Methode etwa wie folgt aussieht:

def login(email, password): 
    try: 
     user = db.session.query(Admin).filter_by(email=email).first()   

     valid_role = 'Admin' 

     if valid_role in user.role:  
      return user 
    except Exception as e: 
     print e 

    return None 

Es gibt entweder eine Typeerror: ' Admin 'Objekt ist nicht iterierbar oder ein ValueError: zu viele Werte zu entpacken, wenn ich versuche, nur die user.id zurückzugeben. Danke für jede Hilfe.

Antwort

2

mehr Werte (tuple) aus Ihrer Funktion zurückzukehren können Sie tun:

# when user is admin 
return True, user.id 

Im Fall der Benutzer kein Administrator ist oder gibt es eine Ausnahme:

return False, None 

So mit (success, admin_id) = login(email, password) Der success Status wird von Ihrer Funktion als boolescher Wert zurückgegeben, und admin_id ist entweder eine gültige Benutzer-ID oder None

+0

Danke, das ist genau das, was ich suche. – joshuar500

+0

Also ich zwei Variablen zuweisen. Was ist der Unterschied zwischen der Klammer und der Klammer? – joshuar500

+0

Die Klammer dient zur besseren Lesbarkeit. Sie können auch ohne sie auskommen –

2

Ihre Funktion gibt ein Objekt zurück; entweder ein Admin() Beispiel:

if valid_role in user.role:  
    return user 

oder None am Ende:

return None 

Weder passt die Erwartung, dass die Funktion zwei Werte zurückgibt, das ist das, was diese Linie erwartet:

(success, admin_id) = login(email, password) 

Passen Sie diese Zeile so an, dass nur der Benutzer empfangen wird , oder reparieren Sie Ihre Funktion, um die Benutzer-ID und das Erfolgsflag zurückzugeben.

Letzteres würde erfordern, dass Sie auf Ihre Funktion umschreiben:

def login(email, password): 
    try: 
     user = db.session.query(Admin).filter_by(email=email).first()   

     valid_role = 'Admin' 

     if valid_role in user.role:  
      return True, user.id 
    except Exception as e: 
     print e 

    return False, None 

Jetzt ist Ihre Funktion gibt immer zwei Elemente, entweder True und den Benutzer id (nicht das Benutzerobjekt) oder False und None.

Verwandte Themen