2015-09-10 12 views
5

Ich bin neu bei PyLint und ich bin froh, viele Warnungen auf meinem Quellcode zu sehen. Obwohl die meisten Warnungen offensichtlich sind, machen einige Warnungen keinen Sinn für mich. Zum BeispielPyLint: Versuch, eine Nicht-Sequenz zu entpacken

def foo(a, b): 
    if b is not None: 
     return a, b 
    else: 
     return None 

result = foo(a, b) 
if result is None: 
    return get_something(a) 

value1, value2 = result 

foo(a, b) ‚s Rückgabewert kann entweder Tupel oder None sein. Nachdem ich den Rückgabewert von foo bekommen habe, überprüfe ich, ob es ein gültiges Ergebnis ist oder nicht. (Es ist etwas ähnlich für die Überprüfung NULL Zeiger in C/C++) Aber PyLint Beschwerden über solchen Code; Attempting to unpack a non-sequence [W:unpacking-non-sequence] Es ist möglich, solche Warnungen zu vermeiden, außer diese Warnung zu unterdrücken?

Antwort

4

Dies ist eine Art von keine Antwort, aber das ist, wie ich dieses Stück Code schreiben würde. Vor allem muss der Code vorhersehbar sein und ich finde immer die gleiche Anzahl von Rückgabewerten vorhersagbar. Dies erleichtert auch die Dokumentation und den folgenden Code etwas kürzer.

def foo(a, b): 
    if b is not None: 
     return a, b 
    else: 
     return None, None 

value1, value2 = foo(a, b) 
if value1 is None: # Alt: value1 is None or value2 is None 
    return get_something(a) 
0

Die Warnung ist von value1, value2 = result was würde einen Fehler, wenn Ihre Funktion None zurückgegeben. Sie können nur a, b zurückkehren und prüfen, ob b None ist:

def foo(a, b): 
    return a, b 

value1, value2 = foo(a, b) 
if value2 is None: 
    return get_something(a) 
# else use value1 and value2 

Der einzige Weg, um Ihre Funktion None zurückgibt, wenn b Keiner ist so die sonst überflüssig scheint. Ich nehme auch an, dass die return get_something(a) Logik in einer Funktion ist.

Verwandte Themen