问题
I'd like to stop evaluation of a module that is being imported, without stopping the whole program.
Here's an example of what I want to achieve:
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.
Expected output:
main1 module1 main2
回答1:
There is no good way to stop execution of a module. You can raise an exception, but then your importing module will need to deal with it. Perhaps just refactor like this:
print(' module1')
some_condition = True
if not some_condition:
print(' module2')
Update: Even better would be to change your module to only define functions and classes, and then have the caller invoke one of those to perform the work they need done.
If you really want to do all this work during import (remember, I think it would be better not to), then you could change your module to be like this:
def _my_whole_freaking_module():
print(' module1')
some_condition = True
if some_condition:
return
print(' module2')
_my_whole_freaking_module()
回答2:
My main.py looks like this,
print 'main 1'
try:
import my_module
except ImportError:
pass
print 'main 2'
and my_module.py looks like this,
print 'module 1'
if True:
raise ImportError
else:
pass
print 'module 2'
output is,
main 1
module 1
main 2
回答3:
You can wrap the module code inside function, like this:
def main():
print(' module1')
some_condition=True
if some_condition:
return
print(' module2')
main()
来源:https://stackoverflow.com/questions/6571476/abort-execution-of-a-module-in-python