在python中将字符串正确地传递给eval()
我的问题是关于eval()'对包含可信用户输入的字符串进行赋值。我不确定如何正确打包字符串(try之后的第一行:)。在下面的示例中,eval()出现异常。任何帮助都将不胜感激。下面是一个示例代码:在python中将字符串正确地传递给eval(),python,eval,Python,Eval,我的问题是关于eval()'对包含可信用户输入的字符串进行赋值。我不确定如何正确打包字符串(try之后的第一行:)。在下面的示例中,eval()出现异常。任何帮助都将不胜感激。下面是一个示例代码: import ast def do_set_operation_on_testids_file(str_filename1, str_filename2, str_set_operation): resulting_set = None with open(str_filename1)
import ast
def do_set_operation_on_testids_file(str_filename1, str_filename2, str_set_operation):
resulting_set = None
with open(str_filename1) as fid1:
with open(str_filename2) as fid2:
list1 = fid1.readlines()
list2 = fid2.readlines()
try:
str_complete_command = "set(list1)." + str_set_operation + "(set(list2))"
resulting_set = ast.literal_eval(str_complete_command)
for each_line in resulting_set:
print(each_line.strip().strip('\n'))
except:
print('Invalid set operation provided: ' + str_set_operation)
非常感谢 您根本不需要使用
literal\u eval()
或eval()
用于按字符串获取集合操作方法:
>>> list1 = [1,2,3,2,4]
>>> list2 = [2,4,5,4]
>>> str_set_operation = "intersection"
>>> set1 = set(list1)
>>> set2 = set(list2)
>>> getattr(set1, str_set_operation)(set2)
set([2, 4])
或者,您可以传递函数,而不是具有set方法名称的字符串。例如:
>>> import operator
>>> def do_set_operation_on_sets(set1, set2, f):
... return f(set1, set2)
...
>>> do_set_operation_on_sets(set1, set2, operator.and_)
set([2, 4])
其中
和
将调用集的交集set1和set2
。如果尝试此操作会发生什么?在尝试求值之前,str\u complete\u命令的值是多少?引发异常。但是我仍然确定如何捕获和打印异常。str_complete_命令是:使用exception,e
代替exception,然后在打印语句中包含str(e)
。