Как проверить, написан ли код на Python 2.7 или 3 и выше?
У меня есть долгоиграющий проект на Python, который содержит много ошибок, и я пытаюсь его отладить. Код грязный и не задокументирован. Я знаком с Python 2.7. В проекте нет бинарных файлов. Простая идея - попробовать выполнить его с помощью команд python2.7 file.py
или python3 file.py
и посмотреть, что сработает. Но, как я уже упоминал, проект уже содержит много ошибок, так что ни один из этих вариантов не работает. Существует ли какой-либо способ, метод или редактор, который мог бы подсказать, в какой версии Python (2.7 или 3.x) был написан код?
2 ответ(ов)
Попробуйте скомпилировать ваш скрипт. Если в нём использован синтаксис, специфичный для определённой версии, то компиляция завершится ошибкой.
Вот команды, которые вы можете использовать:
$ python2 -m py_compile foo.py
$ python3 -m py_compile foo.py
Это позволит вам проверить, поддерживает ли код выбранная версия Python.
Эти конструкции указывают на использование Python 2.x:
import exceptions
for i in xrange(n):
...
print 'No parentheses'
# raw_input не существует в Python 3
response = raw_input()
try:
...
except ValueError, e:
# обратите внимание на запятую выше
...
Эти примеры могут также встречаться в коде Python 3 из-за устаревших привычек:
'%d %f' % (a, b)
# целочисленное деление
r = float(i)/n # где i и n - целые числа
r = n / 2.0
Эти конструкции, скорее всего, принадлежат Python 3:
# f-строки
s = f'{x:.3f} {foo}'
# range возвращает итератор
foo = list(range(n))
try:
...
except ValueError as e:
# обратите внимание на 'as' выше
...
Скачать видео с YouTube с помощью Python в определённую директорию
Доступ к атрибутам на литералах работает для всех типов, кроме `int`; почему?
Генерация / синтез звука на Python?
Фиксация количества знаков после запятой с помощью f-строк
Ошибка: "'dict' объект не имеет метода 'iteritems'"