紙一重の積み重ね

35歳のエンジニアがなれる最高の自分を目指して、学んだことをこつこつ情報発信するブログです。

【Python】flake8指摘事項まとめ

f:id:yokoyantech:20180613171711p:plain

はじめに

最近、Pythonを使ってコードを書きます。まだまだ不慣れなので、flake8を導入してみました。 Rubocopみたいで便利ですね。後学のために指摘された内容をまとめます。

【参考情報】flake8公式

lintlyci.github.io

E111 indentation is not a multiple of four

  • コードインテンドが4の倍数でないとNG

E125 continuation line with same indent as next logical line

  • 継続行は、次の論理行と同じレベルでインテンドしてはダメ
    • if文の条件式を後続の論理行よりも1レベルインテンドを下げる

lintlyci.github.io

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'

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()
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