为什么Pylint在这个raise语句上给出错误E0702,抛出NoneType?

11 投票
2 回答
5656 浏览
提问于 2025-04-15 19:03

假设我有以下这段代码。

def foo():
    foobar = None
    if foobar is not None:
        raise foobar

当我用pylint来检查这段代码时,出现了以下错误:

E0702:4:foo: Raising NoneType while only classes, instances or string are allowed

这是pylint的一个bug吗?还是说我的pylint版本太旧了?

pylint 0.18.0, 
astng 0.19.1, common 0.45.0
Python 2.5.1 (r251:54863, Aug 25 2008, 09:23:26) 

注意:我知道这段代码没有什么实际意义,它只是简化到最基本的样子,以便突出当前的问题。通常在第2行和第3行之间会有一些操作,这些操作可能会让foobar不等于None。而且我不能在这里直接抛出异常,因为那是在另一个线程中进行的,而且有一些限制。

2 个回答

12

幸运的是,你可以告诉pylint,你比它更了解情况:

def foo():
    foobar = None
    if foobar is not None:
        raise foobar  # pylint: disable-msg=E0702
17

这是一个已知的错误。Pylint在分析代码的流程控制方面做得不太好。

撰写回答