终止模块的导入,不死不活?[英] Terminate importation of module non-fatally?

问题描述

我想使用if __name__ != '__main__':,然后在导入脚本时结束脚本的执行,而不是执行通常的if __name__ == '__main__':和文件中所有代码的缩进.

但是,我无法确定什么只会导致这种情况,并且没有其他不良副作用. sys.exit()停止整个解释器和我尝试过的所有其他事情,要么提出某种例外或是非法的.

更新:

我选择了 @trutheality的答案,因为它可以完成我想要的东西,并且非常容易开始使用.就是说,我认为其他一些答案非常有趣和/或聪明 - 感谢所有回答的人 - 并计划在时间允许的情况下进一步调查其中的一些.我不知道自己想做的事情会如此参与.

推荐答案

另一个黑客:

# code

if __name__ == "__main__": exec("""

# main code

#""")

所以...您已经丢失了缩进,但语法突出显示和所使用的编辑器的任何其他功能,除非您每次编辑时都会评论IF行.

其他推荐答案

与我的原始答案非常相似,但略可怕

partialimport.py

class PartialImport(Exception):
    def __init__(self, locals, msg = ""):
        self.module = locals

main.py

from partialimport import PartialImport
try:
   import foo
except PartialImport, e:
    #Note e.module and therefore foo will be a Dict and not a module instance!
    foo = e.module

foo.py

from partialimport import PartialImport

class Boo:
    pass

if __name__ != "__main__":    
    raise PartialImport(locals())

class Foo:
    pass

免责声明

这是一个非常可怕的黑客,会增加您的同龄人谋杀您的可能性,但这确实有效.

其他推荐答案

main.py

try:
   import foo
except:
    print "Failed to import foo"

foo.py

在文件的顶部

if __name__ != "__main__":
   raise RunTimeError("foo must be run as main, not as a module.")

class foo(Object):
   pass

由于Python顺序处理文件,因此无法定义类foo.

另一个想法是通过 pep 302

本文地址:https://www.itbaoku.cn/post/902624.html