[英]Java calling Python function using PythonInterpreter
我有一個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代碼。
有人知道我在做什么錯嗎?
我認為您的問題是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+ "')");
根據要求我的評論作為答案:)
將值為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")
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.