【发布时间】:2026-01-24 03:15:01
【问题描述】:
我是 python 新手,我正在通过 Donour Sizemore 为 ELM327 开发一个名为 pyOBD 的开源项目(不太确定,可能针对更多扫描工具设备)。我可以看出以下是一种转换方法int 的十六进制值。但它是如何工作的?特别是里面有eval的那一行。
def hex_to_int(str):
i = eval("0x" + str, {}, {})
return i
【问题讨论】:
-
这是非常非常糟糕的代码。不要试图从中学习。
-
也许你可以在codereview.stackexchange.com问
-
我真的畏缩了。我不经常畏缩代码。
-
这应该是
int(s, 16)(并且参数应该被称为str以外的其他名称)。 -
这段代码不好的原因有很多:1)它覆盖了函数内部的
str。 2) 空的{}完全不做任何事情 3)eval将运行您放入其中的任何代码(非常危险) 4) 只需执行int(s, 16)即可完成同样的事情,其中s是字符串 5) 如果你放入字符串以外的任何东西,它会爆炸。