Eval无法使用Excel中的String

时间:2017-04-10 17:24:10

标签: python python-2.7

我想执行从Excel工作簿中读取的代码。但是,出于某种原因,以下代码实际上并未进行评估。

import win32com.client
import os

excel = win32com.client.DispatchEx('Excel.Application')
local_dir = os.getcwd()
book = excel.Workbooks.Open(local_dir+'\\Condition.xlsx', True)
sheet = book.Sheets('Sheet1')

condition = sheet.Cells(1,3).Value

print condition
print eval(condition)

excel.Workbooks.Close()

如果有问题的单元格包含“1 + 2”,则上面的代码只打印出“1 + 2”,而不是“3”。如果我用“1 + 2”替换“condition”,它会正确评估。知道为什么这不起作用吗?

1 个答案:

答案 0 :(得分:0)

我建议您不要使用eval(),因为它可能是very dangerous and harmful to your code's security

而不是我建议您使用literal_eval模块中的ast

from ast import literal_eval as eval
# work to do ...

因此,为了处理带有"1+3"等引号的字符串,您可以轻松修复代码,您可以执行以下操作:

from ast import literal_eval as eval
# your actual code
# ...
print(eval(condition.replace('"', '')))
# Or
# print(eval(condition.strip('"')))

编辑:

eval()literal_eval()之间的差异:

  • eval(my_string_or_input):评估代码 (字符串/输入/ raw_input)只要没有调用该函数 检查参数中的代码是否安全。
  • literal_eval(my_string_or_input):如果是,则会引发异常 参数中的string / input / raw_input不是有效的Python代码。所以, 如果存在不安全的密码,则不会被删除。

您可以查看此question/answers in stackoverflow以获取更多说明。