Pylint实例化协程生成器时触发assignment-from-no-return报错问题
Pylint E1111(assignment-from-no-return) 协程生成器实例化报错问题
报错现象
定义用作协程的生成器时,在实例化生成器的代码位置,pylint抛出如下错误:
E1111: Assigning result of a function call, where the function has no return (assignment-from-no-return)
该报错的核心矛盾点在于:对应行的赋值操作拿到的实际是生成器实例对象,而非普通函数调用的return返回值,不符合报错信息描述的场景。
最小复现代码
报错标记在a = test()行,可复现问题的完整代码如下:
def test(): print((yield)) a = test() print(a) next(a) try: a.send("hello, world") except StopIteration: pass
已验证的现象与尝试过的操作
- 将代码中
(yield)修改为(yield None)或(yield True),均无法消除该报错 - 若给函数添加
return True语句,反而会触发no-member错误 - 代码本身可以正常运行,实际执行输出如下:
$ python3 /tmp/test.py <generator object test at 0x7f9de7801b30> hello, world
- 测试发现如果将函数改写为传统生成器形式,pylint不会抛出该报错,无报错的传统生成器示例代码如下:
def test(): yield True a = test() print(a) next(a)
处理诉求
已知可以通过直接禁用该pylint规则绕过提示,但希望在彻底理解报错触发逻辑后再做对应处理。
内容的提问来源于stack exchange,提问作者Vercingatorix
相关产品推荐
相关产品推荐

