python 3.7的正确提升翻译有两个参数



如何将此代码从Python 2转换为Python 3:

except ET.XMLSyntaxError, log:
#This exception raised if the file has parse errors in it
logging.error("XSD: " + log.message)        
raise SyntaxError, log.message

实际上,我不确定raise行在做什么。我已经更换了

except ET.XMLSyntaxError, log:

带有

except ET.XMLSyntaxError as log:

背景:我将我的系统升级到了python 3.7,我们的构建无法使用许多python脚本,尽管将脚本更新到python 3可能比恢复我的ubuntu环境更快。

您的即时解决方案是:

raise SyntaxError(log.message)

如果你有很多Python2.x脚本,我建议你使用2to3工具将其从python2.x翻译成3.x。文档甚至会指出你在这里要求的raise更改:

raise

raise E, V转换为raise E(V),将raise E, V, T转换为raise E(V).with_traceback(T)。如果Etuple,则翻译为不正确,因为用元组代替异常已被删除在3.0中。

下面是一个代码片段,其中包含一段Python 2.x异常格式的代码,我们将在其上运行2to3

import logging
try:
print "hello"
except Exception, log:
#This exception raised if the file has parse errors in it
logging.error("XSD: " + log.message)
raise Exception, log.message

运行2to3

# As needed: pip install 2to3
> 2to3 code.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 code.py
--- code.py (original)
+++ code.py (refactored)
@@ -1,8 +1,8 @@
import logging
try:
-   print "hello"
-except Exception, log:
+   print("hello")
+except Exception as log:
#This exception raised if the file has parse errors in it
logging.error("XSD: " + log.message)
-   raise Exception, log.message
+   raise Exception(log.message)
RefactoringTool: Files that need to be modified:
RefactoringTool: code.py

最新更新