Python:导入异常

2 投票
3 回答
4194 浏览
提问于 2025-04-17 07:41

有没有办法从一个包里导入所有模块,除了一个模块?

我在上课时需要用到某个库里的很多模块,但这个库里有一个模块的名字和我需要的模块重名了。

我需要用到集合操作和交集,但当我从这个库里导入时,因为名字冲突,出现了错误。

我不想单独导入那个模块,也不想在每次调用方法时都加上模块名,因为我用得很频繁。

有没有办法让Python导入所有内容,除了特定的某个方法,比如 set?或者说,能不能稍后再单独导入 set 部分?

3 个回答

0

我想你想要的应该是:

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

会存在的原因。

0

我不太确定我完全理解发生了什么(如果能给出具体的模块名称可能会更清楚)。不过,一般来说,使用 from ... import * 这种写法是不太好的,因为这样就不容易知道某些东西是从哪里来的。更好的做法是用 from ... import thingA, thingB, thingC,这样一目了然。

你也可以使用 import ... as shortname,然后就可以用 shortname.whatever 来调用方法(这里的 shortname 可以是一个很短的名字)。

7

不,这里没有什么专门的术语来描述 from ... import * except blah, bleh, bluh 这种写法。你可以自己写一个导入函数来支持它,或者像下面这样做:

from xyz import *
del set

这样做可以避免覆盖掉内置的 set,这样你就可以再次使用它。如果你需要使用 xyz.set 这个函数,你可以这样:

from xyz import set as xyzset

注意:使用 from ... import * 通常不是一个好的做法,你应该确保你使用的模块支持这种方式。如果模块没有明确说明可以这样使用,那就不要这样做(除非你喜欢后面调试奇怪的问题;)。

撰写回答