DolphinDB Python API的session.run执行带注释脚本失败,是否不剥离注释?
DolphinDB Python API: session.run无法处理注释、runFile正常的问题解决
核心结论
session.run不会自动剥离脚本中的//单行注释或/* */多行注释,而session.runFile由服务器端直接读取脚本文件,会按照DolphinDB标准语法规则解析注释,因此能正常运行。
原因分析
用Python的open()读取脚本内容再传给session.run时,代码会原封不动发送到DolphinDB服务器。服务器对run接口传入的文本内容,在解析注释时可能因换行符、文本格式等细节出现异常;而runFile让服务器直接读取磁盘上的脚本文件,完全遵循DolphinDB脚本的原生解析逻辑,自然能正确识别并忽略注释。
推荐方案
- 优先使用
session.runFile
这是最省心的方式,无需修改脚本,直接调用即可获得和DolphinDB GUI一致的运行效果:
s.runFile("my_script.dos")
- 若必须用
session.run,在Python端预处理注释
如果需要动态修改脚本内容(比如替换参数),不得不使用session.run,可以用正则表达式在Python端移除注释:
import re def clean_dolphindb_code(code): # 移除多行注释 /* ... */(DolphinDB不支持嵌套注释,无需考虑嵌套场景) code = re.sub(r'/\*.*?\*/', '', code, flags=re.DOTALL) # 移除单行注释 // ... code = re.sub(r'//.*$', '', code, flags=re.MULTILINE) # 清理多余空行 code = re.sub(r'\n\s*\n', '\n', code) return code.strip() # 使用示例 with open("my_script.dos", "r") as f: code = f.read() cleaned_code = clean_dolphindb_code(code) s.run(cleaned_code)
内容的提问来源于stack exchange,提问作者Jane
相关产品推荐
相关产品推荐

