Customizing exceptions in python? writing logs in custom exception class?
我在我的python代码中定制异常。 我已将异常类继承到其他类,现在将一些自定义错误定义为从我的自定义异常类派生的类,如下所示:
1 2 3 | class DataCollectorError(Exception): pass class ParamNullError(DataCollectorError) : pass class ParamInvalidTypeError(DataCollectorError) : pass |
我在我的python函数中提出这些异常,如:
1 2 3 4 5 6 7 8 9 10 | def READ_METER_DATA (regIndex, numRegisters, slaveUnit): try: if not regIndex: raise ParamNullError,"register index is null" if not numRegisters: raise ParamNullError,"number of registers should not be null" if not slaveUnit: raise ParamNullError,"Meter Id should not be null" |
和记录错误如:
1 2 3 4 5 6 7 | except DataCollectorError as d: lgr.error('DataCollector Error(READ_METER_DATA): '+d.args[0]) print 'DataCollector Error:(READ_METER_DATA)', d.args[0] except: lgr.error('Unexpected Error: ', sys.exc_info()) print 'Unexpected Error: ', sys.exc_info() pass |
但是这会破坏单元测试脚本的目的,因为它不会在我的单元测试脚本知道之前是否异常引发bcz它被我的catch块捕获。 所以我想在基类本身记录这些错误 -
1 2 3 | Class ParamNullError(DataCollectorError): <----here-----------> pass |
任何人都可以告诉我如何在提出异常时获取传递的字符串?
只需使用
例:
1 2 3 4 5 6 7 | class DataCollectorError(Exception): def __init__(self, msg=''): self.msg = msg log(msg) # use your logging things here def __str__(self): return self.msg |
使用
别。
将您需要进行单元测试的调用分解出来,并将异常处理程序移出:
1 2 3 4 | try: testableFunctionCall() except: lgr.exception('Unexpected Error') |
并测试
或者,使用
1 2 3 4 5 6 7 | from testfixtures import LogCapture with LogCapture() as l: callFunctionUnderTest() l.check( ('packagename', 'ERROR', 'DataCollector Error(READ_METER_DATA): foobar'), ) |