【发布时间】:2010-10-10 21:27:12
【问题描述】:
我有一个字符串,它可以是前缀为“0x”的十六进制数字,也可以是没有特殊前缀的十进制数字,可能是减号。 “0x123”以 16 为基数,“-298”以 10 为基数。
如何在 Python 中将其转换为 int 或 long?
我不想使用 eval(),因为它不安全且过大。
【问题讨论】:
-
为什么 eval 不安全?邪恶的人会在这些数字中偷偷输入代码吗?谁有权访问这些字符串?他们不值得信任吗?
-
eval 是不安全的,因为它允许执行任意代码。如果您从受信任的来源获取字符串,它仍然是不安全的,只是碰巧您依赖这个受信任的来源而没有利用它。如果你总是在控制字符串,为什么它是一个字符串?
-
不,python 代码不安全,这个确切的注释适用于导入任意模块等。假设 python 代码始终由您编写,并且您信任您。如果您正在评估您编写的字符串,为什么它是一个 eval 呢?因此,我在回复中的最后陈述。
-
S.Lott 和 Devin Jeapierre 之间的对话是我认为 SO 上的信誉系统存在的问题。
-
@AaronHall 我认为重复的目标不正确。尽管那里的最佳答案碰巧提到了
int(..., 0)解决方案,但这不是OP 所要求的(例如字符串"10"这应该返回10,另一个问题应该返回16)——事实上我会说int(x,0)方法对于另一个问题是错误的(出于上述原因)
标签: python