2013-03-28 72 views
0

我有一个对象列表。我有一个用户输入的字符串。我需要检查并查看字符串是否在对象列表中。检查eval(字符串)是否在对象列表中。在Python

例如:

string = "book" 
object_list = [book, paper, pencil] 
if eval(string) in object_list: 
    #do this, etc 

这个工作,只要该字符串在列表中。如果字符串是别的东西,如: 字符串=“统治者”

然后if eval(string)...声明给出了一个错误: NameError: 'ruler' is undefined.

+1

哎哟,我错误地标记它作为重复,请忽略。好吧,无论如何:请参阅可能的重复[是否使用eval在Python中的一个坏习惯?](http://stackoverflow.com/questions/1832940/is-using-eval-in-python-a-bad-practice) – delnan 2013-03-28 02:45:18

+0

什么你真的**试图做什么?什么*是*'书'等等?假设你在'object_list'中找到了这个项目;那么什么?为什么运行你的程序的人应该知道你的变量被命名了? – 2013-03-28 04:01:16

回答

2

不要使用eval - 只是嗯,可以创建一个字典映射如:

dispatch = {'book': book, ...} 

随后使用,让回溯发生 - 更多的控制....

或在最坏的情况使用globals()

if globals()[string] in object_list: 
    # do something... 
+0

我是新手编程。你介意多解释一下吗?我已经阅读了全局函数,但我不明白。我怎样才能让字典在值的位置上包含对象本。 – user2218093 2013-03-28 03:12:50

+0

当然 - 你可以做的最好的事情是在手册中查找'globals()',或者查看'dict'是如何工作的... – 2013-03-28 03:15:34

+0

我已经完成了这两个工作。 'Globals:返回一个代表当前全局​​符号表的字典'。这对我来说是希腊人。我已经使用了一些字典,但我不知道如何获取字符串并将其转换为包含字符串键和对象值的字典。 – user2218093 2013-03-28 03:28:22

1

,如果你需要检查字符串是否在列表中,为什么不ü只是使用时,

if string in object_list: 
    #code 
+0

,因为我会比较字符串与对象。如果[书籍,铅笔]中的“书”返回错误。 – user2218093 2013-03-28 03:36:42

+0

然后你可以使用字典 – 2013-03-28 03:41:12

相关问题