为什么pylint抱怨缺少Exception.message?

2024-10-02 20:34:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我通常为我的模块声明一个基本异常,它什么也不做,从这个异常中我派生出可能有额外自定义数据的自定义错误:AFAIK这是正确的方法™ 在Python中使用例外

我还用于从该自定义信息构建一条人类可读的消息并将其传递,以便在错误处理程序中引用该消息。这是一个例子:

# this code is meant to be compatible with Python-2.7.x

class MycoolmoduleException(Exception):
'''base Mycoolmodule Exception'''

class TooManyFoo(MycoolmoduleException):
'''got too many Foo things'''
def __init__(self, foo_num):
    self.foo_num = foo_num
    msg = "someone passed me %d Foos" % foo_num
    super(TooManyFoo, self).__init__(msg)

# .... somewhere else ....
try:
    do_something()
except Exception as exc:
    tell_user(exc.message)

# real world example using Click
@click.command()
@click.pass_context
def foo(ctx):
    '''do something'''
    try:
        # ... try really hard to do something useful ...
    except MycoolmoduleException as exc:
        click.echo(exc.message, err=True)
        ctx.exit(-1)

现在,当我通过pylint-2.3.1运行代码时,它会抱怨我使用了MycoolmoduleException.message

coolmodule.py:458:19: E1101: Instance of 'MycoolmoduleException' has no 'message' member (no-member)

这种代码总是对我有用(在Python2和Python3中都是这样),而且hasattr(exc, 'message')在同一个代码中返回True,那么pylint为什么要抱怨呢?和/或:如何改进代码

(注意,如果我试图捕获内置的Exception而不是我自己的MycoolmoduleException,也会发生同样的情况)


Tags: to代码self消息messagefoo错误exception