12

プログラム全体を停止せずに、インポート中のモジュールの評価を停止したいのですが。

これが私が達成したいことの例です:

main.py

print('main1')
import testmodule
print('main2')

testmodule.py

print(' module1')
some_condition=True
if some_condition:
  exit_from_module()  # How to do this?
print(' module2')     # This line is not executed.

期待される出力:

main1
 module1
main2
4

3 に答える 3

9

モジュールの実行を停止する良い方法はありません。例外を発生させることはできますが、その場合、インポートモジュールはそれを処理する必要があります。おそらく、次のようにリファクタリングするだけです。

print(' module1')
some_condition = True
if not some_condition:
  print(' module2')

更新:さらに良いのは、関数とクラスのみを定義するようにモジュールを変更してから、呼び出し元にそれらの1つを呼び出して、必要な作業を実行させることです。

インポート中にこのすべての作業を本当に実行したい場合(覚えておいてください、そうしない方が良いと思います)、モジュールを次のように変更できます。

def _my_whole_freaking_module():
    print(' module1')
    some_condition = True
    if some_condition:
        return
    print(' module2')

_my_whole_freaking_module()
于 2011-07-04T12:29:33.777 に答える
5

私のmain.pyは次のようになります

print 'main 1'

try:
    import my_module
except ImportError:
    pass

print 'main 2'

my_module.pyは次のようになります。

print 'module 1'

if True:
    raise ImportError
else:
    pass

print 'module 2'

出力は、

main 1
module 1
main 2
于 2011-07-04T12:38:15.133 に答える
2

次のように、関数内でモジュールコードをラップできます。

def main():
  print(' module1')
  some_condition=True
  if some_condition:
    return
  print(' module2')

main()
于 2011-07-04T12:31:11.017 に答える