将Python2.5移植到3.X时,如何替换;从<;模块>;导入*“;?
我有一个python 2.5包,其结构如下: Config.py包含以下行:将Python2.5移植到3.X时,如何替换;从<;模块>;导入*“;?,python,python-3.x,python-2.5,Python,Python 3.x,Python 2.5,我有一个python 2.5包,其结构如下: Config.py包含以下行: from CommonDefines import * 在3.7中运行此代码会出现以下异常: 文件“./../.\ConfigLib\Config.py”,第7行,在 从CommonDefines导入*ModuleNotFoundError:没有名为“CommonDefines”的模块 将该行替换为: from .CommonDefines import * 。。。在3.7中起作用,但在2.5中给出以下错误: S
from CommonDefines import *
在3.7中运行此代码会出现以下异常:
文件“./../.\ConfigLib\Config.py”,第7行,在
从CommonDefines导入*ModuleNotFoundError:没有名为“CommonDefines”的模块
将该行替换为:
from .CommonDefines import *
。。。在3.7中起作用,但在2.5中给出以下错误:
SyntaxError:“导入*”不允许与“发件人”一起使用
有没有一种方法可以写这行代码,使其在2.5和3.X中都能工作
编辑:
以下操作不起作用,因为第二次导入会在2.5中触发语法错误
try:
from CommonDefines import *
except:
from .CommonDefines import *
SyntaxError:“导入*”不允许与“发件人”一起使用
我只想通过名称导入使用一个适当的名称,但这可以通过黑客的方式完成,供您个人使用,使用
exec
:
try:
from CommonDefines import *
except ModuleNotFoundError:
exec('from .CommonDefines import *')
您甚至可以交换它们并捕获
SyntaxError
编写支持如此旧版本Python的多语言代码(上一个2.5.x版本是在2011年5月-)将非常困难(例如,仅支持2.7)。如果您确实需要继续支持2.5,则可能无法使用相同的代码库支持3.x。谢谢,但这并不能真正回答问题。您应该能够编写不同的导入,并封装在块中,然后尝试使用块。但正如@jornsharpe所写的,我不建议对两个版本使用相同的代码库,因为它们之间有很多变化。这就是为什么我没有将其作为答案发布@汉普斯拉尔森注意到OP有一个语法错误,这很难用try:
/来掩盖,除了:
.IMHO*
导入是一种反模式,所以如果我是你,我就用导入的具体名称来替换*
。这就是我最后做的事情,到目前为止它似乎还有效。