Основные изменения в Python с версии 2.2.3 - PullRequest
3 голосов
/ 01 декабря 2009

Я написал небольшой скрипт на python для создания файла и расчета времени. Я тестировал его на Fedora 10 и Ubuntu 8.x, и он работал хорошо. версии Python были 2.5.x.

Я попытался запустить его на своем рабочем сервере (старый Linux-сервер на базе Red Hat), версия python - 2.2.3. скрипт не работает и вызывает синтаксическую ошибку в определении класса.

скрипт определяет класс с методами создания файлов на диске, измерения времени, оценки скорости записи на диск. это начинается так:

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

определение класса указывается как ошибка в Python 2.2.3.

Каковы основные изменения в Python после 2.2.3, которые могут привести к сбою моего приложения? Я использую эти модули: ОС, системный, время, стат, 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 ]

8 голосов
/ 01 декабря 2009

Я недавно написал сценарий, чтобы помочь ответить на этот точный вопрос: pyqver .

Этот скрипт пытается определить минимальную версию Python, которая требуется выполнить определенный исходный файл.

При разработке сценариев Python для распространения желательно определить какая минимальная версия интерпретатора Python требуется. Пиквер пытается ответить на этот вопрос, используя упрощенный анализ выходных данных Python компилятор.

Используйте параметр -v, чтобы перечислить причины, по которым вашему сценарию требуется определенная минимальная версия. Это очень полезно при принятии решения о том, что нужно изменить, чтобы ваш скрипт работал с определенной версией Python.

Как всегда, не стесняйтесь раскошелиться и внести свой вклад!

1 голос
/ 01 декабря 2009

Мои деньги на уроках нового стиля, которые () на вашем классе означают.

1 голос
/ 01 декабря 2009

Эта страница содержит ссылки на все документы по версии Python - ищите документ «Что нового в Python X.X», который Эндрю Кучлинг усердно писал для каждого выпуска.

Лично я бы предположил, что проблема в том, что в вашем определении класса пустые (), но я не вижу этого изменения синтаксиса в списке 2.3 "Что нового".

Я пытался поддерживать обратную совместимость для моего модуля pyparsing обратно до 2.3.2, но это было тогда, когда были добавлены списки, и я просто не могу заставить себя вернуться до этого. Нет шансов обновить ваш сервер?

1 голос
/ 01 декабря 2009

Это странно, потому что он компилируется, если вы удалите () в определении класса. Однако документация гласит, что с пустыми паренами все в порядке.

Поскольку вы используете множество функций Python 2.5, найти их все будет нелегко. Я бы порекомендовал прочитать «Что нового в Python» для каждой версии от 2.2 до 2.5, а затем составить список функций, которые вы могли бы найти с помощью своего, например:

  • Понимания и генераторы
  • троичное выражение
  • Декораторы
  • Новые классы

К счастью, большинство новых функций поставляются с новым языковым ключевым словом (или новым способом использования ключевого слова, в случае троичного x if p else y), так что не составит труда найти их. 1019 *

0 голосов
/ 01 декабря 2009

Тернарный оператор довольно новый. Есть несколько альтернатив, но я бы написал так:

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