我有一个python模块auth.py:
keys= {
"s1": ["k1", "k2"],
"s2": ["k1", "k2"]
}
def get_keys_by_name(name):
return keys[name]以及调用的Java代码:
String keyname= "somename"
interpreter.exec("from services.framework import auth");
List<String> keys = (List<String>) interpreter
.eval("auth.get_keys_by_name(" + keyname+ ")");每次调用代码时,我都会得到一个NameError形式的参数(键名),试图传递给python代码。
有人知道我做错了什么吗?
发布于 2016-07-05 08:25:12
根据要求,我的评论是:)
将带值abc的键传递给eval("auth.get_keys_by_name(" + keyname+ ")")将导致对auth.get_keys_by_name(abc)进行计算,也就是说,解释器可能会查找一个名为abc的变量,因为它不存在,所以您将得到一个NameError。
添加引号(我不是python专家,所以我不知道单引号还是双引号更好)应该修复这个问题,即eval("auth.get_keys_by_name(\"" + keyname + "\")")将评估auth.get_keys_by_name("abc")。
发布于 2016-07-05 08:05:43
我认为您的问题是python解释器将java变量键名解释为Python程序中的python变量,而不是字符串。添加引号到左右键名,您将不会得到这个错误。我其他的话
而不是使用:
List<String> keys = (List<String>) interpreter
.eval("auth.get_keys_by_name(" + keyname+ ")");用这个:
List<String> keys = (List<String>) interpreter
.eval("auth.get_keys_by_name('" + keyname+ "')");https://stackoverflow.com/questions/38197856
复制相似问题