大概意思是这样的
from a.b.c import ddd as ddd_1
from b.c import ddd as ddd_2
# 其实 ddd 应该是一个东西.
ddd_1 is ddd_2 # 返回 false
以上是伪代码. 大概是这个意思吧.
这是因为啥导致的...
1
Hieast 2019-02-19 13:43:48 +08:00 2
a.b 和 b 通常情况下不是一个东西
你自己去 sys.modules 下看看 a 和 b 的信息,对比一下 |
2
wsh1108 2019-02-19 13:57:36 +08:00
这两个对象在内存中的地址不一样吧?你用 == 试试,如果返回 true,应该就是这个问题
|
3
mayorbryant 2019-02-19 14:24:21 +08:00
ddd_1 和 ddd_2 在 globals()里面是不同的对象,只是 ddd_1(x) == ddd_2(x)
|
4
chaleaochexist OP @Hieast
@wsh1108 @mayorbryant 谢谢,我在实际的开发过程中 遇到的这个情况. 实际情况是. ddd_1 和 ddd_2 都是我自定义的 exception 当我 catch 这个 exception 的时候, 竟然获取不到. 大概是这个意思 ``` try: raise ddd_1 except ddd_2 as e: pring 123 ``` |
5
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 |