2015-09-10 12 views
5

Sono nuovo a PyLint e sono lieto di vedere molti avvisi sul mio codice sorgente. Anche se la maggior parte degli avvertimenti è ovvia, alcuni avvertimenti non stanno prendendo piede per me. Ad esempio,PyLint: tentativo di decomprimere una sequenza non

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 

s' foo(a, b) valore di ritorno può essere sia tupla o Nessuno. Dopo aver ottenuto il valore di ritorno da foo, controllo se il risultato è valido o meno. (È in qualche modo simile per controllare il puntatore NULL in C/C++) Tuttavia, i reclami di PyLint su tale codice; Attempting to unpack a non-sequence [W:unpacking-non-sequence] È possibile evitare tali avvisi, ad eccezione della soppressione di questo avviso?

risposta

4

Questa è una specie di non risposta, ma è così che vorrei scrivere questo pezzo di codice. Innanzitutto, il codice deve essere prevedibile e trovo sempre la possibilità di restituire lo stesso numero di valori di ritorno prevedibili. Anche questa documentazione è più semplice e il seguente codice è un po 'più breve.

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

L'avvertimento è da value1, value2 = result che sarebbe errore se la vostra funzione restituito Nessuno. Si può solo tornare a, b e verificare se B è None:

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 

L'unico modo la vostra funzione restituisce None è se b è None in modo che il resto sembra ridondante. Presumo anche che la logica return get_something(a) sia in una funzione.

Problemi correlati