Seite 1 von 1

ValueError?

Verfasst: Donnerstag 2. Juni 2016, 14:39
von Judge
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 ...

Re: ValueError?

Verfasst: Donnerstag 2. Juni 2016, 14:46
von Sirius3
@Judge: `pair` ist ein Tuple mit 2 einbuchstabigen Strings. Einen einbuchstabigen String kann man nicht in zwei Werte entpacken.

Re: ValueError?

Verfasst: Donnerstag 2. Juni 2016, 14:51
von /me
Du möchtest eigentlich gar keine innere Schleife.

Code: Alles auswählen

o, a = pair

Re: ValueError?

Verfasst: Donnerstag 2. Juni 2016, 15:02
von Judge
/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 ... ;)

Re: ValueError?

Verfasst: Donnerstag 2. Juni 2016, 15:17
von 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`. :-)

Re: ValueError?

Verfasst: Donnerstag 2. Juni 2016, 15:59
von snafu
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. ;)

Re: ValueError?

Verfasst: Donnerstag 2. Juni 2016, 16:04
von Judge
Genau so sieht's aus.

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