跳到内容

int-on-sliced-str (FURB166)

派生自 refurb 代码检查工具。

修复总是可用的。

作用

检查在 int 中使用显式进制,并且字符串表达式去掉了前缀(例如,0b, 0o, 或 0x)的情况。

为什么这不好?

给定一个带有前缀的整数字符串(例如,0xABC),Python 可以通过前缀自动确定整数的进制,而无需显式指定。

使用 int(num, 0) 代替 int(num[2:], 16),它将根据前缀自动推断进制。

示例

num = "0xABC"

if num.startswith("0b"):
    i = int(num[2:], 2)
elif num.startswith("0o"):
    i = int(num[2:], 8)
elif num.startswith("0x"):
    i = int(num[2:], 16)

print(i)

建议改为

num = "0xABC"

i = int(num, 0)

print(i)

修复安全性

此规则的修复被标记为不安全,因为 Ruff 无法保证当进制包含在函数调用中时,int 的参数仍然有效。

参考