Python 导入模块的问题

2019-02-19 13:38:21 +08:00
 chaleaochexist

大概意思是这样的

from a.b.c import ddd as ddd_1
from b.c import ddd as ddd_2

# 其实 ddd 应该是一个东西.
ddd_1 is ddd_2 # 返回 false

以上是伪代码. 大概是这个意思吧.

这是因为啥导致的...

1742 次点击
所在节点    Python
5 条回复
Hieast
2019-02-19 13:43:48 +08:00
a.b 和 b 通常情况下不是一个东西
你自己去 sys.modules 下看看 a 和 b 的信息,对比一下
wsh1108
2019-02-19 13:57:36 +08:00
这两个对象在内存中的地址不一样吧?你用 == 试试,如果返回 true,应该就是这个问题
mayorbryant
2019-02-19 14:24:21 +08:00
ddd_1 和 ddd_2 在 globals()里面是不同的对象,只是 ddd_1(x) == ddd_2(x)
chaleaochexist
2019-02-19 14:36:14 +08:00
@Hieast
@wsh1108
@mayorbryant
谢谢,我在实际的开发过程中 遇到的这个情况.

实际情况是.
ddd_1 和 ddd_2 都是我自定义的 exception

当我 catch 这个 exception 的时候, 竟然获取不到.
大概是这个意思
```
try:
raise ddd_1
except ddd_2 as e:
pring 123
```
tabris17
2019-02-19 14:50:26 +08:00
你通过不同路径 import 的 module,即便是同一个文件,然而 python 仍然视其为不同的 module

比如目录结构:
/path_to_project/project_name/test.py

当前目录:/path_to_project/project_name

>> import os
>> os.path.append('/path_to_project')
>> from project_name import test as t1
>> from . import test as t2
>> t1 is t2


False

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/536516

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX