与eval
函数不同,ast.literal_eval
函数安全评估表达式节点或包含Python文字或容器显示的字符串。提供的字符串或节点可能只包含以下Python文字结构:字符串,字节,数字,元组,列表,dicts,集合,布尔值和None。
即。它只评估包含文字或容器的字符串,它不评估包含代码的字符串!
我想知道R中是否有相当于literal_eval的方法?提前致谢!
参考:
ast.literal_eval function
答案 0 :(得分:0)
对safely evaluating arithmetic expressions的回答允许创建类似于ast.literal_eval
的函数用于字符串输入。
此函数将input
字符串以及allowed
操作作为参数进行评估,其默认值类似于ast.literal_eval允许的值:
literal_eval <- function(input, allowed = c("list", "c", "+", "-", "/", "*")) {
# Create safe empty environment
safe_env <- new.env(parent = emptyenv())
# assign allowed functions
lapply(allowed,function(f) assign(f,get(f, "package:base"),safe_env))
# Evaluate input
safe_env$expr <- parse(text = input)
eval(substitute(expr,env = safe_env), env = safe_env)
}
literal_eval("1+1")
[1] 2
literal_eval("c(1,2)")
[1] 1 2
literal_eval("list(2,3)")
[[1]]
[1] 2
[[2]]
[1] 3
literal_eval("system('delete *.*')")
Error in system('delete *.*') : unknown function "system"