如何在完成解析之前退出模块?
Posted
技术标签:
【中文标题】如何在完成解析之前退出模块?【英文标题】:How to exit a module before it has finished parsing? 【发布时间】:2010-10-09 07:01:55 【问题描述】:我有一个导入模块的模块,但在某些情况下,导入的模块可能不存在。导入模块后,有一个类继承自导入模块的类。如果我要在模块不存在的情况下捕获ImportError
异常,我该如何阻止 Python 解析模块的其余部分?如果不可能,我愿意接受其他解决方案。
这是一个基本示例(selfaware.py):
try:
from skynet import SkyNet
except ImportError:
class SelfAwareSkyNet():
pass
exit_module_parsing_here()
class SelfAwareSkyNet(SkyNet):
pass
我能想到的唯一方法是:
在导入selfaware.py
模块之前,检查skynet
模块是否可用,并简单地传递或创建一个存根类。如果多次导入selfaware.py
,这将导致 DRY。
在selfaware.py
中,使用try
块定义类。例如:
try:
from skynet import SkyNet
class SelfAwareSkyNet(SkyNet):
pass
except ImportError:
class SelfAwareSkyNet():
pass
【问题讨论】:
您的解决方案有什么问题?它不工作吗?会出错吗? 这里有回声吗??所有完全相同的重复答案是怎么回事?为什么两个新副本的分数都比旧副本高? @MuMind 我想我没有注意到 hyperboreean 的答案在最初不正确后被编辑。我已经重新接受了答案。 【参考方案1】:try: 支持 else: 子句
try:
from skynet import SkyNet
except ImportError:
class SelfAwareSkyNet():
pass
else:
class SelfAwareSkyNet(SkyNet):
pass
【讨论】:
【参考方案2】:你可以使用:
try:
from skynet import SkyNet
inherit_from = SkyNet
except ImportError:
inherit_from = object
class SelfAwareSkyeNet(inherit_from):
pass
这只有在实现没有区别时才有效。
编辑:评论后的新解决方案。
【讨论】:
以上是关于如何在完成解析之前退出模块?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Vuex 操作完成之前阻止 Vue 生命周期继续进行?