跳转到主要内容

Flake8 检查器,用于检查 raises 中的原始字面量。

项目描述

flake8-errmsg

Actions Status PyPI version PyPI platforms

简介

Flake8 检查器,帮助格式化优美的错误消息。检查包括:

  • EM101:检查在 Exception 抛出时对字符串字面量的原始使用。
  • EM102:检查在 Exception 抛出时对 f-string 字面量的原始使用。
  • EM103:检查在 Exception 抛出时对字符串字面量上的 .format 的原始使用。
  • EM104:检查内置异常缺少括号。
  • EM105:检查内置异常缺少消息。

问题是 Python 将包含 raise 语句的行包含在默认的 traceback 中(以及像 Rich 和 IPython 这样的大多数其他格式化程序)。这意味着用户会得到这样的消息

sub = "Some value"
raise RuntimeError(f"{sub!r} is incorrect")
Traceback (most recent call last):
  File "tmp.py", line 2, in <module>
    raise RuntimeError(f"{sub!r} is incorrect")
RuntimeError: 'Some value' is incorrect

如果更长或更复杂,对于不习惯阅读回溯的用户来说,重复可能会非常令人困惑。

而如果您始终将值赋给类似于 msg 的变量,那么您将得到

sub = "Some value"
msg = f"{sub!r} is incorrect"
raise RuntimeError(msg)
Traceback (most recent call last):
  File "tmp.py", line 3, in <module>
    raise RuntimeError(msg)
RuntimeError: 'Some value' is incorrect

现在有一个更简单的回溯,没有双重消息。如果您有长消息,使用 Black 格式化效果也会更好。

提醒:库应该使用自定义错误类生成回溯,而应用程序应该打印出漂亮的错误信息,通常 包含回溯,除非发生了意外的情况。应用程序不应该为已知可以由用户触发的错误打印回溯。

选项

有一个选项,--errmsg-max-string-length,默认值为 0,但可以设置为一个更大的值。检查将忽略长度小于此长度的字符串字面量。此选项也支持在配置模式下。这将仅影响字符串字面量,而不会影响 f-strings。

用法

只需将其添加到您的 .pre-commit-config.yaml 中的 flake8 检查的 additional_dependencies 下。如果您使用 extend-select,则可能不需要其他配置。

您还可以通过脚本入口点手动运行此检查(不使用 Flake8 的 noqa 过滤)(pipx run flake8-errmsg <files>) 或模块入口点 (python -m flake8_errmsg <files> 当已安装时)。

常见问题解答

Q: 为什么是 Python 3.10+?
A: 这是一个静态检查工具,面向开发者。开发和静态检查应该在 3.10 上。而且我很懒,并且匹配语句非常适合这种类型的事情。而且 AST 模块在 3.8 时已经改变了。如果您需要在旧版本上运行,请使用 Ruff(其中包含此插件的检查)。

Q: 其他哪些类型的检查是可以接受的?
A: 有助于生成漂亮错误信息的检查。例如,可能需要使用 raise SystemExit(n) 而不是 sys.exitexit 等。可能还需要添加一个检查,用于没有设置 stacklevel(通常为 2)的 warnings.warn

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分发

flake8_errmsg-0.5.1.tar.gz (13.3 kB 查看哈希值)

上传时间

构建分发

flake8_errmsg-0.5.1-py3-none-any.whl (9.4 kB 查看哈希值)

上传时间 Python 3

支持