事象
VScodeでコーディングをしていると何気なくコード整形するために(Ctrl+Alt+F)を押してます。
いつものようにコード整形をしてみると今まで動いていたのにエラーが発生!
で、コードを見てみると

が

に変化していました。
sys.path.appendでパスを設定した後、そのパスのライブラリ(my_lib)をimportしていたのですが、sys.path.appendの前にimport文が来ることでパスが読み込めずエラーが発生していました。
原因
VScodeでPythonを使う場合、自動整形は標準でautopep8が使われています。
※確認方法「ファイル」→「ユーザ設定」→「設定」で「python.formatting」で検索してみましょう。

autopep8 は、PEP8 コーディングスタイルに準拠した Python のコードフォーマッタであり、PEP8では
「import文 は常にファイルの先頭、つまり モジュールコメントや docstring の直後、そしてモジュールのグローバル変数や定数定義の前に置くようにします。」とあるため、それに従い位置を変更してしまうようです。
対処方法
勝手に移動してほしくないimport文の後ろに # noqa をつけましょう。

「# noqa」はno-qa、つまり品質保証外という事でPEP8警告を無視する際に使われます。
そのため、ファイル全体は自動整形するけれど、ここの行だけは無視してね、みたいな使い方ができます。
特にsys.path.appendを利用する場合は、sys.path.appendの後に読み込むimport文を記述する必要があるため、必須の指定のような気がしますね。
コメント