2015-09-10 3 views
5

私はPyLintを初めて使いました。私のソースコードにはたくさんの警告が表示されてうれしいです。ほとんどの警告は明白ですが、いくつかの警告は私には意味がありません。例えば、PyLint:非シーケンスをアンパックしようとしています

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)

の戻り値は、タプルまたは無しのいずれかであり得ます。 fooから戻り値を取得した後、有効な結果であるかどうかをチェックします。 (これはC/C++でポインタNULLをチェックするのに多少似ています)しかし、PyLintはそのようなコードについて苦情を申します。 Attempting to unpack a non-sequence [W:unpacking-non-sequence]この警告を抑制することを除いて、このような警告を回避することは可能ですか?

答えて

4

これは無回答ですが、これが私がこのコードを書く方法です。まず、コードは予測可能でなければならず、常に同じ数の戻り値を予測可能なものとして返すことがわかります。これはドキュメントも簡単で、次のコードは少し短くなっています。

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

警告は、あなたの関数がNoneを返さない場合は、エラーでしょうvalue1, value2 = resultからです。他の冗長ようですので、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 

あなたの関数はNoneを返す唯一の方法は次のとおりです。bがNoneの場合は、単に、Bを返して確認することができます。私はまた、return get_something(a)論理が関数にあると仮定します。

関連する問題