ValueError?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Judge
User
Beiträge: 129
Registriert: Mittwoch 13. Juni 2012, 22:27
Wohnort: Ratingen
Kontaktdaten:

Hallo zusammen,

ich weiß, aufgrund des simplen Konstruktes übersehe ich scheinbar nur was vollkommen offensichtliches ... aber ich komme nicht drauf:
Wieso kriege ich hier einen ValueError und angeblich nur eines anstelle von 2 Werten?

Code: Alles auswählen

opts = [('1', '2'), ('3', '4')]
for pair in opts:
    print(pair)
    print(len(pair))
    for o, a in pair:
        if o == '1':
            print(a)
Die ersten beiden print()s zeigen ja auch 2 Werte:
('1', '2')
2
Traceback (most recent call last):
File "/vagrant_data/Misc_Tools/KVM_XML_Monitor/test.py", line 5, in <module>
for o, a in pair:
ValueError: not enough values to unpack (expected 2, got 1
Danke und sorry wegen der n00b - Frage ...
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Judge: `pair` ist ein Tuple mit 2 einbuchstabigen Strings. Einen einbuchstabigen String kann man nicht in zwei Werte entpacken.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Du möchtest eigentlich gar keine innere Schleife.

Code: Alles auswählen

o, a = pair
Benutzeravatar
Judge
User
Beiträge: 129
Registriert: Mittwoch 13. Juni 2012, 22:27
Wohnort: Ratingen
Kontaktdaten:

/me hat geschrieben:Du möchtest eigentlich gar keine innere Schleife.

Code: Alles auswählen

o, a = pair
Hi /me,

Du hast es erkannt ... sorry und danke!
Maaaaann ... manchmal ey ... ;)
BlackJack

Beziehungsweise wenn man `pair` nicht tatsächlich braucht gleich in der äusseren Schleife ``for o, a in opts:`` — gerne auch mit vernünftigen Namen statt `o` und `a`. :-)
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Mit anderen Worten: Die äußere `for`-Schleife iteriert über die Liste und hat bei jedem Durchlauf einen 2-elementrigen Tupel als aktuelles Objekt. Die innere `for`-Schleife iteriert über den Inhalt des jeweiligen Tupels und hat somit jeweils eine der Zeichenketten als aktuelles Objekt. Das Unpacking (``o, a``) für die innere Schleife bezieht sich dann auf den Inhalt der Zeichenkette (d.h. einzelne Zeichen). Der Programmfluss ist an der Stelle also schon einen Schritt weiter als dein Gedankengang. ;)
Benutzeravatar
Judge
User
Beiträge: 129
Registriert: Mittwoch 13. Juni 2012, 22:27
Wohnort: Ratingen
Kontaktdaten:

Genau so sieht's aus.

Danke für die Hilfe - stand mal sowas von auf dem Schlauch ...
Antworten