3

我编写了一个小的 python 脚本来创建一个文件并计算时间。我已经在 Fedora 10 和 Ubuntu 8.x 上对其进行了测试,并且运行良好。python版本是2.5.x。

我试图在我的生产服务器(一个旧的基于红帽的 linux 服务器)上运行它,python 的版本是 2.2.3。该脚本不起作用并在类定义中引发语法错误。

该脚本定义了一个类,该类具有在磁盘上创建文件并测量时间的方法,以估计磁盘写入速度。它是这样开始的:

class TestDiskSpeed():
    def __init__(self, rounds=1, speedMode=SPEED_MODE_MEGABYTE):

类定义被python 2.2.3指出为错误。

自 2.2.3 以来,python 的哪些主要变化可能会使我的应用程序崩溃?我正在使用这些模块:os、sys、time、stat、gc。

更新:

通过()从类定义中删除 python 接受了该类。但它在这一行引发了另一个错误:

size = long(size) if size != None else self._size

我是一名PHP开发人员,刚进入python编程(可能一个月),并且非常习惯在PHP中完成的三元运算,如下所示:

$var = (condition) ? $valueIfTrue : $valueIfFalse;

我搜索并发现它是在 python 中完成的,就像我用于size变量的那个一样。虽然似乎 python 2.2.3 不喜欢它。

我打算在这里插入所有代码(无论如何我都会将脚本作为 LGPL 发布),但代码超过 150 行(仍在开发中)。

4

5 回答 5

8

我前段时间写了一个脚本来帮助回答这个确切的问题:pyqver

此脚本尝试识别执行特定源文件所需的最低 Python 版本。

在开发用于分发的 Python 脚本时,最好确定所需的 Python 解释器的最低版本。pyqver 试图通过对 Python 编译器输出的简单分析来回答这个问题。

使用该-v选项列出您的脚本需要特定最低版本的原因。这对于决定更改哪些内容以使您的脚本适用于特定版本的 Python 非常有帮助。

与往常一样,请随意分叉和贡献!

于 2009-12-01T06:53:34.663 回答
1

这很奇怪,因为如果您删除()类定义中的 ,它就会编译。但是,文档说那里的空括号是可以的。

由于您使用了许多 python 2.5 功能,因此很难找到所有这些功能。我建议您阅读 2.2 和 2.5 之间每个版本的“Python 中的新功能”,然后列出您可以搜索的功能列表,例如:

  • 理解和生成器
  • 三元表达式
  • 装饰器
  • 新式班

幸运的是,大多数新功能都带有一个新的语言关键字(或使用关键字的新方式,在 ternary 的情况下x if p else y),因此使用 grep 应该不难。

于 2009-12-01T06:58:22.113 回答
1

此页面链接到所有 Python 版本文档 - 查找 Andrew Kuchling 为每个版本努力编写的“Python XX 中的新功能”文档。

顺便说一句,我猜问题是你的类定义中的空 (),但我没有看到 2.3“新增功能”文档中列出的这种语法更改。

我试图将我的 pyparsing 模块的向后兼容性保持到 2.3.2,但那是添加列表推导的时候,我只是不能让自己在那之前回去。没有机会升级您的服务器?

于 2009-12-01T06:59:32.983 回答
1

我的钱花在了新式的课程()上,你的课程就暗示了这一点。

于 2009-12-01T07:07:09.817 回答
0

三元运算符是相当新的。有几种选择,但我会这样写:

if size is None:
    size = self._size
else:
    size = long(size)
于 2009-12-01T07:55:47.567 回答