Python:导入异常
有没有办法从一个包里导入所有模块,除了一个模块?
我在上课时需要用到某个库里的很多模块,但这个库里有一个模块的名字和我需要的模块重名了。
我需要用到集合操作和交集,但当我从这个库里导入时,因为名字冲突,出现了错误。
我不想单独导入那个模块,也不想在每次调用方法时都加上模块名,因为我用得很频繁。
有没有办法让Python导入所有内容,除了特定的某个方法,比如 set
?或者说,能不能稍后再单独导入 set
部分?
3 个回答
我想你想要的应该是:
from thing import a, b, c, d, e, f
这段代码会从thing
中导入a, b, c, d, e, f
。
据我所知,没办法直接用from thing import all but a, b, c
这种写法。
这就是为什么
import thing
thing.a
会存在的原因。
我不太确定我完全理解发生了什么(如果能给出具体的模块名称可能会更清楚)。不过,一般来说,使用 from ... import *
这种写法是不太好的,因为这样就不容易知道某些东西是从哪里来的。更好的做法是用 from ... import thingA, thingB, thingC
,这样一目了然。
你也可以使用 import ... as shortname
,然后就可以用 shortname.whatever
来调用方法(这里的 shortname
可以是一个很短的名字)。
不,这里没有什么专门的术语来描述 from ... import * except blah, bleh, bluh
这种写法。你可以自己写一个导入函数来支持它,或者像下面这样做:
from xyz import *
del set
这样做可以避免覆盖掉内置的 set
,这样你就可以再次使用它。如果你需要使用 xyz.set
这个函数,你可以这样:
from xyz import set as xyzset
注意:使用 from ... import *
通常不是一个好的做法,你应该确保你使用的模块支持这种方式。如果模块没有明确说明可以这样使用,那就不要这样做(除非你喜欢后面调试奇怪的问题;)。