23

私は flake8 で厳密な pre-commit フックを設定しているので、満足するまでコミットできません。これは通常は良いことですが、まったく問題がないように見える問題が発生しています。

Flake8 に を認識させることができませんFileNotFoundError

たとえば .py

try:
    pass
except FileNotFoundError:
    pass

これは、Flake8 にエラーを生成させるのに十分なコードです。

$ flake8 example.py
example.py:3:8: F821 undefined name 'FileNotFoundError'
$ python example.py # no error
$ python3 example.py # no error

Python docsを確認しましたが、FileNotFoundError は「組み込み」の例外であるため、どこからでもインポートする必要はないと思います。Python インタープリターはそれについて文句を言っていません。flake8 の問題のようです。

4

3 に答える 3

23

Python Code Qualityツール リポジトリで、この問題に関する言及がいくつか見つかりました。具体的には#75 を発行します。

2 つの回避策がリストされました。フラグを使用して--builtins、flake8 がフラグを立てている既知のビルトインのコンマ区切りリストを指定できます。

$ flake8 example.py
example.py:3:8: F821 undefined name 'FileNotFoundError'
$ flake8 --builtins=FileNotFoundError,... example.py
$ 

もう 1 つの回避策は、python2 の代わりに python3 で flake8 を実行することです。

$ /usr/bin/python3.5 -m pyflakes example.py 
$ 

コードをひねって構文チェック ツールを回避するのは非生産的であるため、これら 2 つの解決策のいずれかがうまくいくことを願っています。

于 2015-12-21T02:39:46.673 に答える