自2.2.3版以来python发生了重大变化

时间:2009-12-01 06:49:25

标签: python changelog

我写了一个小的python脚本来创建文件并计算时间。我在Fedora 10和Ubuntu 8.x上进行了测试,效果很好。 python版本是2.5.x。

我试图在我的生产服务器(一个旧的基于red hat的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行(仍处于开发阶段)。

5 个答案:

答案 0 :(得分:8)

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

  

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

     

在开发用于分发的Python脚本时,需要识别   需要哪个最小版本的Python解释器。 pyqver试图   使用对Python输出的简单分析来回答这个问题   编译器。

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

与往常一样,随意分叉并做出贡献!

答案 1 :(得分:1)

这很奇怪,因为如果删除类定义中的(),它会编译。但是,documentation表示没有空的parens。

由于你使用了很多python 2.5功能,所以找到它们将是一项艰苦的工作。我建议您阅读2.2到2.5之间的每个版本的“Python中的新功能”,然后提供一些您可能能够搜索的功能列表,例如:

  • 理解和生成器
  • 三元表达
  • 装修
  • 新式课程

幸运的是,大多数新功能都附带了一个新的语言关键字(或者使用关键字的新方式,在三元x if p else y的情况下),因此对它们来说应该不难

答案 2 :(得分:1)

This page指向所有Python版本文档的链接 - 查找Andrew Kuchling为每个版本努力撰写的“Python X.X中的新功能”文档。

副手,我猜这个问题是你的类定义中的空(),但我没有看到2.3“什么是新的”文档中列出的这种语法更改。

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

答案 3 :(得分:1)

我的钱用于新式课程,你班上的()会暗示。

答案 4 :(得分:0)

三元运算符很新。有一些选择,但我会这样写:

if size is None:
    size = self._size
else:
    size = long(size)