以下代码段如何工作?

时间:2013-08-23 18:56:20

标签: python eval obd-ii

我是python的新手,我正在通过Donour Sizemore为ELM327进行一个名为pyOBD的开源项目(不太确定,可能针对更多的scantool设备)。我可以看出以下是一种转换方法一个十六进制值到int.But它是如何工作的?特别是其中包含eval的行。

 def hex_to_int(str):
     i = eval("0x" + str, {}, {})
     return i

1 个答案:

答案 0 :(得分:4)

eval运行一个字符串,就像它是Python代码一样,然后输出结果。

在这种情况下,它运行类似0xaf的东西,这是一种指定十六进制文字的方法,并输出结果整数。尝试在Python解释器中键入0xaf,结果会得到一个整数。

eval在不受信任的输入上使用是不安全的。例如,

eval("0xa and __import__('os').remove('some/file/path')")

可以删除系统上的文件。

最好使用ast.literal_evalint

>>> import ast
>>> ast.literal_eval("0xaf")
175
>>> int("af", 16)
175

哪些是安全的并产生相同的结果。