在python中自定义异常。如何记录错误?

时间:2013-05-14 09:39:14

标签: python inheritance logging exception-handling

我在我的python代码中定制异常。我已将异常类继承到其他类,现在将一些自定义错误定义为从我的自定义异常类派生的类,如下所示:

class DataCollectorError(Exception): pass
class ParamNullError(DataCollectorError) : pass
class ParamInvalidTypeError(DataCollectorError) : pass

我在我的python函数中提出这些异常,如:

def READ_METER_DATA (regIndex, numRegisters, slaveUnit):
    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"

    if(isinstance(regIndex, int) == False):
        raise ParamInvalidTypeError, "register index passed is not int"

    if(isinstance(numRegisters, int) == False):
        raise ParamInvalidTypeError, "number of registers passed is not int"

现在我想使用记录器将错误消息记录到日志文件中,但不知道在哪里做。

  1. 我应该通过将该功能代码放在try catch中来实现,但是我将如何获取这些错误消息
  2. 我应该在我创建的自定义错误类(DataCollectorError
  3. 中执行此操作
  4. 或个别错误类,如ParamNullError等。
  5. 但后来我不知道在哪里以及如何获取该错误消息来记录它们。

1 个答案:

答案 0 :(得分:4)

只需使用标准logging module;它会立即使用异常消息记录您的异常

当您的应用程序捕获异常时,请使用logging.exception() function进行记录;该异常会自动添加到日志条目中:

log = logging.getLogger('some-identifier')

try:
    #
except DataCollectorError:
    log.exception('An error occurred')

默认情况下,异常有一个.args元组参数,该元组中的第一个值就是您的消息。

您的代码的一些样式反馈:

  • 请勿测试== False。相反,请使用not

    if not isinstance(regIndex, int):
    
  • 提升您的例外情况:

    raise ParamNullError("register index is null")
    

    而不是raise class, message样式,以便更容易转移到Python 3。