Ansys 2021 R2中IronPython在SpaceClaim脚本编辑器回溯行号错误问题
解决IronPython在SpaceClaim脚本编辑器中异常行号错误的问题
在Ansys 2021 R2的SpaceClaim脚本编辑器中使用IronPython时,直接通过sys.exc_info()获取的行号不准确,是因为嵌入环境对脚本做了预处理或包装,导致顶层栈帧的行号指向了非用户代码的位置。
可以通过traceback模块的extract_tb方法获取真实的异常行号,修改后的测试代码如下:
import sys import traceback a = 10 try: b = a / 0 except Exception as e: # 提取完整的栈跟踪信息 stack_trace = traceback.extract_tb(sys.exc_info()[2]) # 取最后一条栈帧记录,对应异常发生的位置 _, lineno, _, _ = stack_trace[-1] print(f"lineno: {lineno}")
这段代码会输出正确的行号6。
另外,也可以直接打印完整的栈跟踪来验证:
import traceback a = 10 try: b = a / 0 except Exception as e: traceback.print_exc()
输出的traceback信息中会明确标注异常发生在第6行。
原因在于:SpaceClaim的IronPython环境会对用户脚本进行包装执行,sys.exc_info()返回的初始tb对象指向的是包装代码的行,而非用户编写的脚本行。traceback.extract_tb会解析整个栈跟踪链,从中筛选出用户代码对应的栈帧记录,从而得到正确的行号。
内容的提问来源于stack exchange,提问作者SchluppIng
相关产品推荐
相关产品推荐

