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)
建议改为
修复安全性
此规则的修复被标记为不安全,因为 Ruff 无法保证当进制包含在函数调用中时,int
的参数仍然有效。