Ich bin immer durch diese Tatsache verärgert:Keine Rückgabe oder ein Tupel und Auspacken
$ cat foo.py
def foo(flag):
if flag:
return (1,2)
else:
return None
first, second = foo(True)
first, second = foo(False)
$ python foo.py
Traceback (most recent call last):
File "foo.py", line 8, in <module>
first, second = foo(False)
TypeError: 'NoneType' object is not iterable
Tatsache ist, dass, um ohne Probleme richtig zu entpacken ich entweder die Typeerror zu fangen oder etwas wie
zu habenvalues = foo(False)
if values is not None:
first, second = values
Was ist irgendwie nervig. Gibt es einen Trick, um diese Situation zu verbessern (zum Beispiel, um sowohl die erste als auch die zweite auf Keine zu stellen, ohne foo zurückzukehren (None, None)) oder einen Vorschlag über die beste Designstrategie für Fälle wie die, die ich präsentiere? * Variablen vielleicht?
ooooh ... das habe ich nicht berücksichtigt. sehr "perlish" Ansatz, aber clever. –
Ich stimme nicht überein, dass es perl-ish ist. 'x oder y' ist eine sehr pythische Art zu sagen' (x? x: y) 'oder' (wenn x dann x sonst y) 'oder' (wenn nicht x dann y) 'oder wie auch immer du es erklären willst . –
ok, gerade ausgearbeitet von einem "mitsingen" den "was auch immer oder stirb()" typischen Perlsatz. –