问题 如何编写异常捕获代码在Python2.4中工作到Python3


反正有没有写一个从python 2.4到python 3兼容的异常捕获代码?

喜欢这段代码:

# only works in python 2.4 to 2.7
try:
    pass
except Exception,e:
   print(e)

# only works in python 2.6 to 3.3
try:
    pass
except Exception as e:
    print(e)

6689
2017-10-01 23:33


起源

很多项目维护他们的python 2代码,并使用 2to3的 根据需要自动将其转换为python 3。这通常比尝试编写兼容两者的代码更容易(这可能不是您遇到的最困难的问题)。 - James


答案:


尝试编写适用于Python 2和Python 3的代码最终是徒劳的,因为它们之间存在着巨大的差异。实际上,很多项目现在都在单独的Python 2和Python 3版本中进行维护。

也就是说,如果你是以一种超级便携的方式做到这一点......

import sys
try:
    ...
except Exception:
    t, e = sys.exc_info()[:2]
    print(e)

16
2017-10-01 23:36



虽然这不是线程安全的 - John La Rooy
谢谢nneonneo的回答,感谢@gnibbler的提示:-) - yegle
@gnibbler:我相信它是......“返回的信息特定于当前线程和当前堆栈帧。” - nneonneo
如果你正在使用 记录仪 课程(真的,你应该),你甚至不需要 import sys 并使用不可思议的代码打印您的例外 - 您可以打电话 Logger.exception("message") 或类方法 logging.exception("message") 并且异常消息和/或堆栈跟踪将包含在记录器输出中。 - Alex Dupuy