我在变量jss中有以下字符串。
jss = '''
Java.perform(
function()
{
var item = Java.use("java.util.Random");
console.log("HOOKING random");
item.nextInt.overload("int").implementation = function(a)
{
var ret = this.nextInt(a);
return {0};
}
}
);
'''.format("1234")
我正在尝试使用格式说明符来简单地将其传递一些值(在这种情况下为“ 1234”)。
当我尝试在iPython中运行它时,出现以下错误:
ERROR:root:An unexpected error occurred while tokenizing input
The following traceback may be corrupted or invalid
The error message is: ('EOF in multi-line string', (1, 0))
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-1-a900f760c449> in <module>()
12 }
13 );
---> 14 '''.format("1234")
KeyError: '\n var item = Java'
不知道这里出了什么问题。有人可以帮忙理解吗?
答案 0 :(得分:1)
您需要使用{{
和}}
来转义其他花括号-否则python格式令牌生成器希望理解该模式。 (仅在python3中测试过...)
jss = '''
Java.perform(
function()
{{
var item = Java.use("java.util.Random");
console.log("HOOKING random");
item.nextInt.overload("int").implementation = function(a)
{{
var ret = this.nextInt(a);
return {0};
}}
}}
);
'''.format("1234")
假设您不想用作格式选项的花括号始终以多个空格开头(并且格式花括号最多以一个空格开头),则可以替换这些空格:
import re
# with your original jss
sanitized = re.sub('(\s\s+){', r'\1{{', jss)
sanitized = re.sub('(\s\s+)}', r'\1}}', sanitized)
print(sanitized.format("1234"))
...可能有更明智的正则表达式可以满足您的需求...