将python 2.5 移植到3.X 时,如何替换"from <module> import *"?
When porting python 2.5 to 3.X, how can I replace "from <module> import *"?
我有一个 python 2.5 包,结构如下:
Config.py 包含以下行:
from CommonDefines import *
在 3.7 中运行此代码会出现以下异常:
File "../../.\ConfigLib\Config.py", line 7, in
from CommonDefines import * ModuleNotFoundError: No module named 'CommonDefines'
将该行替换为:
from .CommonDefines import *
... 在 3.7 中有效,但在 2.5 中出现以下错误:
SyntaxError: 'import *' not allowed with 'from .'
有没有办法编写这一行,以便在 2.5 和 3.X 中都可以使用?
编辑:
以下不起作用,因为第二次导入会触发 2.5 中的语法错误
try:
from CommonDefines import *
except:
from .CommonDefines import *
SyntaxError: 'import *' not allowed with 'from .'
我只想使用正确的逐个名称导入,但这可以通过一种 hacky 方式完成,供您个人使用,使用 exec
:
try:
from CommonDefines import *
except ModuleNotFoundError:
exec('from .CommonDefines import *')
你甚至可以交换它们并抓住 SyntaxError
。
我有一个 python 2.5 包,结构如下:
Config.py 包含以下行:
from CommonDefines import *
在 3.7 中运行此代码会出现以下异常:
File "../../.\ConfigLib\Config.py", line 7, in from CommonDefines import * ModuleNotFoundError: No module named 'CommonDefines'
将该行替换为:
from .CommonDefines import *
... 在 3.7 中有效,但在 2.5 中出现以下错误:
SyntaxError: 'import *' not allowed with 'from .'
有没有办法编写这一行,以便在 2.5 和 3.X 中都可以使用?
编辑:
以下不起作用,因为第二次导入会触发 2.5 中的语法错误
try:
from CommonDefines import *
except:
from .CommonDefines import *
SyntaxError: 'import *' not allowed with 'from .'
我只想使用正确的逐个名称导入,但这可以通过一种 hacky 方式完成,供您个人使用,使用 exec
:
try:
from CommonDefines import *
except ModuleNotFoundError:
exec('from .CommonDefines import *')
你甚至可以交换它们并抓住 SyntaxError
。