tec*_*cal 10 python versioning
今天我尝试在我编写的以Python 2.6为目标的脚本中使用pyPdf 1.12.在运行我的脚本,甚至导入pyPdf时,我会收到有关弃用功能的抱怨(md5-> hashsum,sets).我想提供一个补丁来使这项工作在2.6中干净利落,但我想作者不想破坏旧版本(2.5及更早版本)的兼容性.
截至目前为止,搜索Google和Stack Overflow都没有发现.我觉得我在导入语句之前看过try/except块之前完成类似的事情,但找不到任何例子.是否有支持多个Python版本的普遍接受的最佳实践?
Fer*_*yer 12
有两种方法可以做到这一点:
(1)就像你描述的那样:尝试一些东西并解决旧版本的异常.例如,json如果失败,您可以尝试导入模块并导入userland实现:
try:
import json
except ImportError:
import myutils.myjson as json
Run Code Online (Sandbox Code Playgroud)
这是Django的一个例子(他们经常使用这种技术):
try:
reversed
except NameError:
from django.utils.itercompat import reversed # Python 2.3 fallback
Run Code Online (Sandbox Code Playgroud)
如果迭代器reversed可用,则使用它.否则,他们从utils包中导入自己的实现.
(2)显式比较Python解释器的版本:
import sys
if sys.version_info < (2, 6, 0):
# Do stuff for old version...
else:
# Do 2.6+ stuff
Run Code Online (Sandbox Code Playgroud)
sys.version_info 是一个元组,可以很容易地与类似的版本元组进行比较.
| 归档时间: |
|
| 查看次数: |
2379 次 |
| 最近记录: |