2017-05-31 14 views
0

PyCharmは、割り当て前に変数categoryを参照できると警告していますが、私はそうは思わないと思います。PyCharm:最終ブロックの変数が割り当て前に参照される可能性がありますか?

Exception(致命的なエラーを除く)をすべてキャッチし、最後にtryまたはexceptブロックの後にコールする必要があります。

try: 
     category = lst[2] 
    except: 
     category = None 
    finally: 
     if not category: #here 
      category = self.default_category 

enter image description here

あなたはどう思いますか?それは本当ですか、それともバグでしょうか?

+0

バグかもしれません。私はtryを警告を取り除く前にCategoryにNoneを代入するのが見えます。 'except'の下線は何ですか? –

答えて

2

おそらく、PyCharmは「what to assign」を考慮せずに割り当てを見ています。 (など、またはNone/1、)

try: 
    category = lst[2] 
except: 
    category = Noone 
finally: 
    if not category: 
     category = self.default_category 

は、その後、あなたが取得したい:

NameError: name 'category' is not defined 

例外が存在することになるとそれはあなたが代わりに書いた場合Noneが違いを作るものです、考える、あります例外でlstは空だった場合:

例外はtry節で発生していると except節で処理されていない(または、それは回の出現がある場合除外されているか、または 句)、finally句が実行された後でre-raisedされます。

+0

これは考えられる原因のようです。 Pycharmは「tryが最初の代入の前に例外を発生させ、次にexceptが2番目の代入の前に例外を発生させた場合はどうでしょうか? – Kevin

関連する問題