有没有办法将列表作为函数参数传递给eval()或者我是否必须将其转换为字符串然后将其解析为函数中的列表?
我的简单示例如下:
eval("func1(\'" + fArgs + "\')")
Run Code Online (Sandbox Code Playgroud)
我只是不确定是否有更好的方法将fArgs作为列表而不是字符串
注意:该列表由JSON响应提供
编辑:好的,这是我的课程的更多,所以我更好地了解我如何使用eval
def test(arg):
print arg
#Add all allowed functions to this list to be mapped to a dictionary
safe_list = ['test']
safe_dict = dict([ (k, locals().get(k, None)) for k in safe_list ])
class Validate:
def __init__(self, Value, fName, fArgs):
eval(fName + "(\'" + fArgs + "\')", {"__builtins__":None},safe_dict)
Run Code Online (Sandbox Code Playgroud)
我认为这可能是错的,但据我所知,这是对eval的安全使用,因为可以调用的唯一函数是safe_list字典中列出的函数.要运行的函数和该函数的参数是从JSON对象中提取的.参数将被构造为一个列表,将列表与","一起加入列表中,还是被解释为实际参数或只是一个参数?
我有一个调用的脚本:
eval source \{$scriptfile\}
Run Code Online (Sandbox Code Playgroud)
其中$ scriptfile是另一个TCL脚本.有没有办法将参数传递给脚本?我想做点什么:
set sampleData "ID=14678934"
eval source \{$scriptfile\} $sampleData
Run Code Online (Sandbox Code Playgroud)
我知道这是不允许的,但有没有办法将数据传递给使用eval源执行的脚本?
我今天刚刚注意到我的wordpress博客中有很多垃圾链接.我刚刚找到一个包含的文件
<?php eval (chr(101).chr(114)...
Run Code Online (Sandbox Code Playgroud)
它非常长的字符串.有人可以告诉我如何解码它以查看它的作用?这样我可以尝试删除垃圾链接?谢谢.
<!DOCTYPE html>
<html>
<body>
<h2>JSON Object Creation in JavaScript</h2>
<p>
Name: <span id="jname"></span><br />
Eval Name: <span id="evalname"></span><br />
<p>
<script>
var yyyy= {
"name":"John Johnson",
"street":"Oslo West 555",
"age":33,
"phone":"555 1234567"};
document.getElementById("jname").innerHTML = yyyy.name;
document.getElementById("evalname").innerHTML = eval(yyyy).name;
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我正在下面这个有和没有eval()相同
JavaScript中的JSON对象创建
姓名:约翰逊
评论名称:约翰逊
我的Chrome网络应用程序出现了问题.该代码适用于普通的Chrome浏览器,但Chrome网上应用店不喜欢我的代码:
拒绝评估脚本,因为它违反了以下内容安全策略指令:"script-src'self'chrome-extension-resource:".
这是我的代码中包含eval()的部分之一:
function checkTimeToSinglePeriod(p) {
console.log("Check time for Period " + p + "...");
var TempBHour = "period" + p + ".bhour";
TempBHour = eval(TempBHour);
var TempBMin = "period" + p + ".bmin";
TempBMin = eval(TempBMin);
var TempEHour = "period" + p + ".ehour";
TempEHour = eval(TempEHour);
var TempEMin = "period" + p + ".emin";
TempEMin = eval(TempEMin);
}
Run Code Online (Sandbox Code Playgroud)
这个函数是从一个遍历"p"的for循环中调用的,所以它遍历我的对象:period1.bhour,period2.bhour等.Temp变量(TempEmin,TempEHour等)产生period1.ehour的值.可能是14之类的,而不是像"period1.ehour"这样的字符串我在我的代码中也有一个部分,它使用eval()将创建的字符串切换为数组名称:
for (d = 1; d < 8; d++) { //Loop through days
for (l = 1; l < 8; …Run Code Online (Sandbox Code Playgroud) 当我运行下面的代码时,我收到以下错误:eval()arg 1必须是字符串或代码对象
谁知道为什么?这是我从一本书中学习的代码,所以我认为它是正确的.
# Prompt the user to enter three numbers
number1 = eval(input("Enter the first number: "))
number2 = eval(input("Enter the second number: "))
number3 = eval(input("Enter the third number: "))
# Compute average
average = (number1 + number2 + number3) / 3
print("The average of", number1, number2, number3, "is", average)
Run Code Online (Sandbox Code Playgroud) 我正在观看Prestashop的代码,我看到以下内容:
eval(($class_infos->isAbstract() ? 'abstract ' : '').'class '.$classname.' extends '.$classname.'Core {}');
Run Code Online (Sandbox Code Playgroud)
他们使用这个来覆盖核心类,在autoload方法中(完整文件是PrestaShop/classes/Autoload.php)我只是想知道创建动态类是否是一件好事:
我想知道是否可以使用eval来创建类数据属性.像下面的代码:
class Test:
def __init(self):
matrix_names = ['F', 'B', 'H', 'Q', 'R', 'x', 'P']
for matrix in matrix_names:
print matrix
operation = "self.%s = self.__matrix_read(%s)" %\
(matrix, matrix)
eval(operation)
def __matrix_read(self, filename):
return (read(".matrix/%s.csv"%filename))
Run Code Online (Sandbox Code Playgroud)
在iPython中我得到:
File "<string>", line 1
self.F = self.__matrix_read(F)
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud) 下面的两个函数对两个整数执行算术运算并返回整数结果.
我听说很多关于eval()的使用非常糟糕,因为它会导致很多问题.但是看看下面我写的代码,看起来eval()可以省去很多行代码,对吧?
def dict_calculate(operation, num1, num2):
operations = {'add': '+', 'subtract': '-', 'multiply': '*', 'divide': '//'}
return eval(str(num1) + operations[operation] + str(num2))
def conditional_calculate(operation, num1, num2):
if operation == 'add':
return num1 + num2
if operation == 'subtract':
return num1 - num2
if operation == 'multiply':
return num1 * num2
if operation == 'divide':
return num1 // num2
if __name__ == "__main__":
x = 10
y = 5
print(str(dict_calculate('add', x, y)) + ', ', end='')
print(str(dict_calculate('subtract', x, y)) + ', …Run Code Online (Sandbox Code Playgroud) 想象以下问题:您在python中有一些内容的字典,并想生成将创建此字典的python代码。(这与eval类似,但相反)是否可以执行此操作?
场景: 我正在使用远程python解释器。我可以给它源文件,但没有输入。因此,我现在正在寻找一种将输入数据编码为python源文件的方法。
例:
d = {'a': [1,4,7]}
str_d = reverse_eval(d)
# "{'a': [1, 4, 7]}"
eval(str_d) == d
Run Code Online (Sandbox Code Playgroud) eval ×10
python ×5
javascript ×2
json ×2
php ×2
class ×1
decode ×1
dictionary ×1
html ×1
list ×1
prestashop ×1
spam ×1
tcl ×1
wordpress ×1