Ошибка автоматического перевода 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 поддерживается.