当用户想要在Python中使用import *导入所有内容时,如何引发异常?

时间:2015-04-03 16:29:38

标签: python

我想禁止用户像这样导入:

from module.sub import *

这应该引发异常并且不要让任何东西进入命名空间,除非用户导入任何特定的东西:

from module.sub import apples

2 个答案:

答案 0 :(得分:5)

module.sub

__all__ = []

它不会引发异常,但当有人from module.sub import *时,将不会导入任何内容 module.sub仍会初始化,添加到{{1} },并添加到本地名称空间,但sys.modules中定义的名称都不会添加到名称空间。

然后,您可以直接引用module.sub而不是module.sub.apples


如果你真的想要一个例外,代价是有点混乱,你可以这样做:

apples

然后:

__all__ = ['not_defined']

答案 1 :(得分:0)

幸运的是,这些好人们开辟了python开源,所以你当然可以做到这一点

在此处下载相应的来源https://www.python.org/downloads/source/

修改import.c,如果它得到了splat,就会引发错误......

或修改Grammar以忽略splat(这也需要更改Parser

一旦你做了其中的一件事,只需重新编译python并使用你的新python而不是标准的(只需重新编译可能会对这一步骤的复杂性有点误导)

或更简单地在您的模块__ALL__ = []

中使用__init__.py