Ошибка автоматического перевода Python 2to3

Я хочу перевести код Python2 в Python 3. Это очень просто, но это не работает

import sys
import MySQLdb
import Cookbook

try:
 conn = Cookbook.connect ()
print "Connected"
 except MySQLdb.Error, e:
 print "Cannot connect to server"
 print "Error code:", e.args[0]
 print "Error message:", e.args[1]
 sys.exit (1)

conn.close ()
print "Disconnected"

Я получил это в терминале

2to3 harness.py
RefactoringTool: Skipping optional fixer: buffer
RefactoringTool: Skipping optional fixer: idioms
RefactoringTool: Skipping optional fixer: set_literal
RefactoringTool: Skipping optional fixer: ws_comma
RefactoringTool: Can't parse harness.py: ParseError: bad input: type=1, value='print', context=('', (9, 0))
RefactoringTool: No files need to be modified.
RefactoringTool: There was 1 error:
RefactoringTool: Can't parse harness.py: ParseError: bad input: type=1, value='print', context=('', (9, 0))

Зачем?

3 ответа

Решение

Не знаю, решит ли это вашу проблему, но вы можете попробовать исправить отступы:

import sys
import MySQLdb
import Cookbook

try:
    conn = Cookbook.connect ()
    print "Connected"
except MySQLdb.Error, e:
    print "Cannot connect to server"
    print "Error code:", e.args[0]
    print "Error message:", e.args[1]
    sys.exit (1)

conn.close ()
print "Disconnected"

Это то, что делает 2to3

2to3 new.py
RefactoringTool: Skipping optional fixer: buffer
RefactoringTool: Skipping optional fixer: idioms
RefactoringTool: Skipping optional fixer: set_literal
RefactoringTool: Skipping optional fixer: ws_comma
RefactoringTool: Refactored new.py
--- new.py  (original)
+++ new.py  (refactored)
@@ -4,12 +4,12 @@

 try:
     conn = Cookbook.connect ()
-    print "Connected"
-except MySQLdb.Error, e:
-    print "Cannot connect to server"
-    print "Error code:", e.args[0]
-    print "Error message:", e.args[1]
+    print("Connected")
+except MySQLdb.Error as e:
+    print("Cannot connect to server")
+    print("Error code:", e.args[0])
+    print("Error message:", e.args[1])
     sys.exit (1)

 conn.close ()
-print "Disconnected"
+print("Disconnected")
RefactoringTool: Files that need to be modified:
RefactoringTool: new.py

Я изменился к тому же

except MySQLdb.Error as e:

и теперь у меня есть код Python3.

Я думаю, что проблема может быть с MySQLdb. Этот пакет поддерживает только до версии 2.7 и не будет поддерживать python 3. В настоящее время MySQL-python 1.2.5 является последней версией (25-07-2017)

Версии MySQL с 3.23 по 5.5 и Python-2.4 до 2.7 в настоящее время поддерживаются. Python-3.0 будет поддерживаться в будущем выпуске. PyPy поддерживается.

Другие вопросы по тегам