我通常为我的模块声明一个基本异常,它什么也不做,从这个异常中我派生出可能有额外自定义数据的自定义错误: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
,也会发生同样的情况)
目前没有回答
相关问题 更多 >
编程相关推荐