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

Sud*_*hra -1 python

我想禁止用户导入这样:

from module.sub import *
Run Code Online (Sandbox Code Playgroud)

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

from module.sub import apples
Run Code Online (Sandbox Code Playgroud)

Wil*_*son 5

module.sub:

__all__ = []
Run Code Online (Sandbox Code Playgroud)

它不会引发异常,但是当有人这样做时from module.sub import *,将导入的任何内容 module.sub仍将被初始化,添加到sys.modules本地命名空间,并添加到本地命名空间中,但是没有任何名称module.sub将被添加到命名空间中.

然后你可以参考,module.sub.apples但不能apples直接参考.


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

__all__ = ['not_defined']
Run Code Online (Sandbox Code Playgroud)

然后:

>>> from module.sub import *
Traceback (most recent call last):
  File "<input>", line 1, in <module>
AttributeError: 'module' object has no attribute 'not_defined'
Run Code Online (Sandbox Code Playgroud)