はじめに
最近、Pythonを使ってコードを書きます。まだまだ不慣れなので、flake8
を導入してみました。
Rubocopみたいで便利ですね。後学のために指摘された内容をまとめます。
【参考情報】flake8公式
E111 indentation is not a multiple of four
- コードインテンドが4の倍数でないとNG
E125 continuation line with same indent as next logical line
- 継続行は、次の論理行と同じレベルでインテンドしてはダメ
- if文の条件式を後続の論理行よりも1レベルインテンドを下げる
E128 continuation line under-indented for visual indent
- 継続行が視覚的なインテンドのためにインテンドされていない
- 改行を入れる場合は、括弧の下に入れる
- ダメな例
cur.execute( query, (id, hoge_no,
- 修正例
cur.execute( query, (id, hoge_no,
E265 block comment should start with '# '
- コメントの記述に関する指摘
#
の後にスペースがないとNG
# config file containing credentials for rds mysql instance db_host = "hoge.ap-northeast-1.rds.amazonaws.com" db_name = "fuga_dev_db"
F401 'xxxx' imported but unused
xxxx
をimportしているが使っていない- 不要なimportはしない
E402 module level import not at top of file
- モジュールレベルのインポートがファイルの先頭にない
- 全てのインポート後に処理を書く
F403 'from xxxx import *' used; unable to detect undefined names
- インポートされたオブジェクトが何処に定義されているのかわからないためNG
*
ではなく、モジュール名・クラス名・関数名を明示的に宣言する
E501 line too long (84 > 79 characters)
- 行が長すぎます
- 79文字以下にする
- 長すぎる文字列は、継続文字のバックスラッシュ
\
を使って改行する ()
を使った改行でもOK
E722 do not use bare except'
中身がないexceptを利用しない
except:
は全ての例外を補足してしまうため使用しない。明示的に中身を指定する
ダメな例。
try: conn = psycopg2.connect( host=rds_host, database=rds_database, port=rds_port, user=rds_user, password=rds_password ) except: logger.error( "ERROR: Unexpected error: Could not connect to PostgreSQL instance.") sys.exit()
- 修正例。
psycopg2
のエラーは以下参照。- The psycopg2 module content — Psycopg 2.7.5 documentation
except psycopg2.DatabaseError: logger.error( "ERROR: Unexpected error: Could not connect to PostgreSQL instance.") sys.exit()
F811 redefinition of unused 'xxxx' from line 55
- n行目からのみ使用の再定義
- 同一名のオブジェクトがあるので、片方を削除する。
- メソッドのオーバーロードはできないので注意。
- 同一名のオブジェクトがあるので、片方を削除する。
F821 undefined name 'xxxx'
- 未定義の名前
- 変数など使用する場所で宣言する
F841 local variable 'id' is assigned to but never used
- ローカル変数名が割り当てられているが使われていない
- 未使用のローカル変数を削除する
W291 trailing whitespace
- 行の末尾に空白があるとNG