Flake8搭配pep8-naming导入ElementTree的别名报错问题咨询
pep8-naming 导入命名规则说明
首先澄清一个常见的误判:你尝试的两组别名写法里,import xml.etree.ElementTree as element_tree本身完全合规,不会触发命名警告——你看到的N813报错,是扫描到import xml.etree.ElementTree as et这一行触发的,警告信息里明确标注了触发源是别名为et的写法,并非element_tree的写法有问题。
两类警告的判定逻辑
- N817(驼峰对象导入为全大写缩写):被导入对象本身是驼峰(CamelCase)命名时,如果给它设置的别名是全大写纯缩写(比如
ET),插件会判定你用了Python约定中专门表示模块级常量的全大写命名方式指代模块/类,语义不匹配,抛出警告。 - N813(驼峰对象导入为纯小写短缩写):被导入对象本身是驼峰命名时,如果给它设置的别名是无对应语义的纯小写短串(比如
et),插件会判定你用了不符合导入规范的模糊缩写,抛出警告。这类纯小写无下划线的短名,本来是约定俗成给非驼峰的通用模块做社区公认缩写(比如np对应numpy、pd对应pandas)的,自定义的无背景短缩写不在规则默认豁免范围内。
符合插件默认规则的正确导入方式
- 无别名直接导入:
import xml.etree.ElementTree
这种写法完全不会触发任何命名类警告,后续调用直接使用模块全路径即可。 - 需要简化书写时,使用和原模块语义对应的蛇形全称做别名:
import xml.etree.ElementTree as element_tree
这个写法完全匹配规则要求:采用Python通用的蛇形命名、别名语义和原模块名一一对应、既不使用全大写常量式命名,也不使用模糊短缩写,不会触发相关警告。
补充:如果因为团队协作习惯或历史代码原因,需要使用
ET这类社区常用缩写,可以在flake8配置中对特定导入行添加行级忽略注释,或在全局配置中把对应规则加入该模块的豁免列表——这类调整属于自定义规则豁免,不是插件默认要求的规范写法。
内容的提问来源于stack exchange,提问作者xjcl
相关产品推荐
相关产品推荐

