14

哪种方法最适合在 python 中导入特定于版本的模块?我的用例是我正在编写将部署到 python 2.3 环境中并在几个月内升级到 python 2.5 的代码。这:

if sys.version_info[:2] >= (2, 5):
    from string import Template
else:
    from our.compat.string import Template

或这个

try:
    from string import Template
except ImportError:
    from our.compat.string import Template

我知道这两种情况都同样正确并且可以正常工作,但哪种情况更可取?

4

2 回答 2

28

总是第二种方式——你永远不知道会安装什么不同的 Python 安装。Template是一个不太重要的特定情况,但是当您测试功能而不是版本控制时,您总是更健壮。

这就是我使Testoob支持 Python 2.2 - 2.6 的方式:我尝试以不同的方式导入模块,直到它工作为止。它也与 3rd-party 库有关。

这是一个极端情况 - 支持 ElementTree 出现的不同选项:

try: import elementtree.ElementTree as ET
except ImportError:
    try: import cElementTree as ET
    except ImportError:
        try: import lxml.etree as ET
        except ImportError:
            import xml.etree.ElementTree as ET # Python 2.5 and up
于 2008-12-04T23:57:33.737 回答
2

我可能会争辩说第二个更可取。有时,您可以将模块从较新版本的 python 安装到较旧版本中。例如,wsgiref 随 Python 2.5 一起提供,但将其安装到旧版本中并不少见(我认为它将与 python 2.3 一起使用)。

于 2008-12-04T23:40:20.840 回答