集成pytest后pre-commit中Black格式化工具执行失败的问题求助
解决pre-commit中Black格式化工具的报错问题
嘿,我来帮你搞定这个Black钩子的报错问题!
问题原因
你在Black的钩子配置里加了always_run: true,这个参数会强制pre-commit不管有没有Python文件变更,都要执行Black。但Black本身是需要指定要格式化的文件或代码内容的——当你提交的内容里没有任何Python文件时,Black拿不到任何处理目标,自然就抛出了One of 'SRC' or 'code' is required的错误。
解决方案
根据你的实际需求,有两种靠谱的处理方式:
方式一:移除always_run: true(推荐)
这是最贴合pre-commit设计逻辑的做法,只有当有Python文件被修改提交时,才会触发Black格式化。修改你的Black钩子配置如下:
- repo: https://github.com/psf/black rev: 21.12b0 hooks: - id: black name: black entry: black language: system require_serial: true types: [python] # 删除掉always_run: true这一行
这样一来,当你提交的内容里没有Python文件时,Black会自动跳过,不会再报错。
方式二:保留always_run: true但指定默认处理目标
如果你确实需要每次提交都强制检查整个项目的Python文件,可以修改entry参数,同时加上pass_filenames: false来告诉pre-commit不要传递变更文件名,而是用我们指定的目标:
- repo: https://github.com/psf/black rev: 21.12b0 hooks: - id: black name: black entry: black . # 用`.`指定处理当前目录下所有匹配的Python文件 language: system require_serial: true types: [python] always_run: true pass_filenames: false # 必须加上这个,避免pre-commit传递空的文件名列表
验证修改
修改完配置后,记得重新安装钩子让配置生效:
pre-commit install --install-hooks
之后再执行提交命令就不会再遇到这个错误啦!
内容的提问来源于stack exchange,提问作者JnooriRS
相关产品推荐
相关产品推荐

