1

我是我们组织内部使用的相当大的 Python 包的罪魁祸首。我正在为 Python3 准备包;对于我可以控制自己的代码,这是非常可行的 - 但是如果/当组织默认解释器被拉到 3.x 时,有许多脚本“在野外”会中断。典型情况如下:

一些我无法控制的随机脚本:

#!/usr/bin/env python    #   By manipulating the environment I will ...
                         #   ... eventually switch this to pick up python3
import company.package   #   This is Python3 safe.

...
print "This - will fail hard"

我想做的(如果可能的话)是在我控制的“company.package”代码中插入一些全局警告指令 - 以便用户可以在全局解释器被拉到 Python3 之前收到警告。这可能吗?

4

1 回答 1

3

您可以检测脚本何时在 Python 2.x 中运行并发出更新警告,如下所示:

import warnings
import sys

if sys.version_info < (3,0):
    warnings.warn("company.package will be ported to Python 3 soon. Make sure that your script is Py3k-safe!")

2to3不幸的是,除了基于静态分析(例如使用工具)和/或广泛的单元测试的人工检查之外,没有办法确保 Python 脚本在 Python3 中顺利运行。

编辑:移植到 Python 3 不仅是语法问题,还涉及模块重命名(如urllib、被拆分或cStringIO)和概念更改(如字节数组/字符串的区别)。没有import魔法可以检查。

于 2013-10-06T17:10:31.527 回答