跳到内容

missing-f-string-syntax (RUF027)

修复总是可用的。

此规则不稳定且处于预览状态。使用需要 --preview 标志。

作用

搜索看起来像是要用作 f-string,但缺少 f 前缀的字符串。

为什么这不好?

只有当字符串具有 f 前缀时,花括号内的表达式才会被求值。

详情

尽管包含类似 f-string 的语法,但仍然有很多可能的字符串字面量并非旨在用作 f-string。 因此,此 lint 会忽略所有满足以下条件之一的字符串:

  1. 该字符串是一个独立的表达式。 例如,该规则会忽略所有文档字符串。
  2. 该字符串是函数调用的一部分,其参数名称与至少一个变量匹配(例如:format("Message: {value}", value="Hello World")
  3. 该字符串(或字符串的父表达式)对其具有直接方法调用(例如:"{value}".format(...)
  4. 该字符串没有 {...} 表达式部分,或使用了无效的 f-string 语法。
  5. 该字符串引用了不在作用域内的变量,或者根本没有捕获任何变量。
  6. 潜在 f-string 中的任何格式说明符都无效。
  7. 该字符串是已知期望模板字符串而不是已求值的 f-string 的函数调用的一部分:例如,logging 调用,gettext 调用,或 FastAPI 路径

示例

name = "Sarah"
day_of_week = "Tuesday"
print("Hello {name}! It is {day_of_week} today!")

建议改为

name = "Sarah"
day_of_week = "Tuesday"
print(f"Hello {name}! It is {day_of_week} today!")

修复安全性

此修复程序将始终更改程序的行为,并且尽管有上述详细说明的预防措施,但这可能是不可取的。 因此,该修复程序始终标记为不安全。