我有一个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+ ")");
每次调用代码时,我都会从我尝试传递给python代码的参数(keyname)中获取NameError。
任何人都知道我做错了什么?
答案 0 :(得分:1)
我认为你的问题是python解释器将java变量keyname解释为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+ "')");
答案 1 :(得分:1)
根据要求,我的评论作为答案:)
将值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")
。