我想从异常元组中获取错误代码。在Python2.4中,下面的代码可以工作,但在Python2.7中不行。似乎运行python2.7时的exceptionTuple无法被索引?有什么想法吗?在
import traceback
import sys
import types
class CRaiseException(Exception):
'''info'''
args = []
def __init__(self, exceptionTuple):
print "__init__"
self.failureData = exceptionTuple
self.args = self.failureData # Becomes excptionData.args
def __str__(self):
print "__str__"
return str(self.failureData)
def __args__(self):
print "__args__"
return tuple(self.failureData)
def raiseException(code, msg='', exceptionType = CRaiseException):
failureData = (('Fail message', 0, 11044, 0), 22.0, (0.005, 0.001))
raise exceptionType(failureData)
if __name__ == '__main__':
try:
print sys.version
raiseException(12345, 'skip TrackCleanup and raise to do serial format.')
except CRaiseException, exceptionData:
try:
failureData = exceptionData
print "failureData = %s" %str(failureData)
failCode = failureData[0][2]
print "failCode = %s" %str(failCode)
print "Tuple exceptionData -- PASS"
except:
print "Non-tuple exceptioData -- FAIL"
print "Traceback %s" %traceback.format_exc()
Python 2.4结果:
^{pr2}$Python 2.7结果:
2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]
__init__
__str__
failureData = (('Fail message', 0, 11044, 0), 22.0, (0.005, 0.001))
Non-tuple exceptioData -- FAIL
Traceback Traceback (most recent call last):
File "D:\Python\raiseException.py", line 51, in <module>
failCode = failureData[0][2] # Works in Python 2.4 but not in Python 2.7
IndexError: tuple index out of range
我不熟悉Python2.4,但我尝试过在Python2.7.5中使用您的代码。在
如果您
print type(failureData)
在哪里捕捉到异常,它将告诉您:这显然意味着failureData是一个类而不是一个元组,因此不能用[0][2]对其进行索引。在
只需更改:
^{pr2}$到
这个变化给了我这样的结果:
Python和Python是一样的。在
希望有帮助。在
编辑:
构造代码的更好方法是避免在类和main中使用相同的变量名。这样做看起来更好:
然后您还可以避免我最初建议的丑陋的
failureData.failureData[0][2]
情况。在相关问题 更多 >
编程相关推荐