关于Pylint单行pragma粘性生效而非仅单行生效的疑问
Pylint 单行禁用指令的行为误区
测试代码
"""Demo""" import logging import sys logger = logging.getLogger() logging.basicConfig(level='DEBUG') logger.debug('import random (starting...)') import random logger.debug('import random (done)') sys.argv() random.random()
触发的Pylint错误
demo_pylint.py:10:0: C0413: Import "import random" should be placed at the top of the module (wrong-import-position)
问题解析
你之前的核心误解是:写在代码行末尾的# pylint: disable=xxx默认不是单行生效的。
Pylint的禁用指令分两种场景:
- 想要仅对当前单行生效,必须在指令后加上
, line后缀,比如:
这种写法才会让禁用规则只作用于当前行。logger = logging.getLogger() # pylint: disable=wrong-import-position, line - 不带
line后缀的禁用指令,不管是单独占一行还是跟在代码行末尾,都会被视为全局区块级禁用——从当前行开始,后续所有代码都会跳过该规则检查,直到遇到# pylint: enable=wrong-import-position指令,或者模块结束。
你在第6行末尾加的不带line的禁用指令,本质和在该行上方单独加# pylint: disable=wrong-import-position效果完全一样,自然会让第10行的import不再触发C0413错误。
如果只想临时禁用该规则来放行中间的import,正确的写法应该是:
# pylint: disable=wrong-import-position logger.debug('import random (starting...)') import random logger.debug('import random (done)') # pylint: enable=wrong-import-position
内容的提问来源于stack exchange,提问作者ruck
相关产品推荐
相关产品推荐

