关于继承:在python中自定义异常。 如何记录错误?

Customizing exceptions in python. How to log errors?

我在我的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
11
12
13
14
15
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"

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

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


    只需使用标准日志记录模块; 它将使用开箱即用的异常消息记录您的异常。

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

    1
    2
    3
    4
    5
    6
    log = logging.getLogger('some-identifier')

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

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

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

    • 不要测试== False。 相反,使用not

      1
      if not isinstance(regIndex, int):
    • 提出例外情况:

      1
      raise ParamNullError("register index is null")

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