在GraalVM的GraalPy中运行Python脚本,错误信息能否显示行号?
GraalPy错误信息显示行号的解决方案
GraalPy完全支持在错误信息中包含行号,你遇到的问题是因为直接将字符串代码传入context.eval()时,没有为这段代码指定源标识,导致GraalPy无法关联行号信息。
解决方法很简单,手动创建Source实例并指定源名称(可以是任意标识,比如自定义的脚本文件名),这样错误信息就会带上行号:
package interop; import org.graalvm.polyglot.*; class App { public static void main(String[] args) { try (var context = Context.create()) { Source source = Source.newBuilder("python", "print()\nprint()\ndef error()", "my_script.py") .build(); context.eval(source); } catch (PolyglotException e) { e.printStackTrace(); } } }
运行这段代码后,你会得到包含行号的错误提示:
SyntaxError: expected ':' at my_script.py:3
如果你的Python代码是从本地文件读取的,直接基于文件创建Source即可,GraalPy会自动处理行号:
Source source = Source.newBuilder("python", new File("your_script.py")).build();
内容的提问来源于stack exchange,提问作者Thomas Rynne
相关产品推荐
相关产品推荐

