2015-09-07 [長年日記]
■使っていないimport文が勝手に消されてしまうのを回避する
「importしていること」が必要で「importされたもの」を全然使っていない文があった。
Flaskの起動スクリプトが
from app import app import views if __name__ == '__main__': app.run()
ってなったのだけど、この import views がそう。
このviews.pyにルーティングが書いてあるのでこのimportは消せない。
消せないけどPyCharmはここが使ってないぞ! というWarningになった。
これでうっかり PyCharm で optimize import してしまうと消えてしまう。困った。いや。困らないけど気持ち悪い。
解決は2つあって
from app import app import views __all__ = ['views'] if __name__ == '__main__': app.run()
とする。
from xxx import *
した時にインポートされる要素を明示するための記法。これを流用する。
もうひとつは、
from app import app # noinspection PyUnresolvedReferences import views if __name__ == '__main__': app.run()
として、インスペクションを抑止するコメント行を書く。
説明と中身が合っていないような気がするが多分私の理解不足だろう。
おきまりで書いてた
if __name__ == '__main__': reload(sys) sys.setdefaultencoding("utf-8")
なんかも
if __name__ == '__main__': reload(sys) # noinspection PyUnresolvedReferences sys.setdefaultencoding("utf-8")
と書いて抑止できた。
これ、便利っぽいので検索したら書けるかもしれないマークアップの一覧を見つけたのでメモ。
メモ
def archive_note(pk): try: note = Note.get(Note.id == pk) except Note.DoesNotExist: abort(404) # noinspection PyUnboundLocalVariable note.archived = True note.save() return jsonify({'success': True})
abort(404) が適切に例外を再raiseする(ハズな)のでtryの下に到達しないのだけど、PyCharmはそれが分からずに「Noteが初期化されてないかもしれないぞ」と言ってくる。tryの上に note = None とか意味ない(=意図をコメント残しておかないといけないような)文を入れて抑止するよりもこれの方がいいかも。