新样式格式说明符抛出标记化错误

New style format specifier throwing tokenization error

我在变量 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'

不确定这里出了什么问题。有人可以帮忙理解吗?

你需要用 {{}} 转义你的其他大括号 - 否则 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'{{', jss)
sanitized = re.sub('(\s\s+)}', r'}}', sanitized)

print(sanitized.format("1234"))

...可能会有更合理的正则表达式来满足您的需要...