挙動の理解が正しいとすれば、その条件の下で書きたいように書けばいいだけかも知れませんが、ミスが少ないのはどういうやり方かとか、メリット・デメリットなどをアドバイスいただければと思います。
▽1
●
quintia ●100ポイント ベストアンサー |
関数定義にimportを書くのは、モジュールが正常でない場合=importが失敗する場合に、そのエラーが発生するのが後になる、というデメリットがあるので、私はやらないし、基本的にするべきではないと思います。
import time def a(): import must_fail return def b(): # なんか時間がかかる処理のエミュレート time.sleep(30) return if __name__ == '__main__': b() a()
を実行するとImportErrorが発生するのは30秒後です。
そのぐらいならまぁいいのですが、1時間ぐらい処理したあとに該当の関数が初めて呼ばれてエラーになったら目も当てられません。
失敗するときは最初に失敗するように書くべきでしょう。
PEP8の推奨もファイル先頭のdocstringのあと、モジュールグローバルな宣言の前であるべき、となっています。