跳到主要内容

错误与诊断

CadFlow 通过两种方式报告失败:当调用契约无法完成时抛出异常;对于可以检查和修复的预检、验证、求解或分析状态,返回结构化诊断。

异常边界

失败类型常见原因调用方操作
ValueError范围、向量、枚举、Session 兼容性或领域状态无效修正输入,不要原样重试
TypeErrorPython 类型或调用形式不受支持修正调用点或 Schema 转换
NativeError原生库加载或 C ABI 操作失败检查消息、操作、环境与输入几何
FileNotFoundError / OSError输入缺失、路径拒绝或外部 I/O 失败修正路径或准备资源
领域异常Scene 契约、柔性原生转换或重放等领域失败使用领域验证报告和异常页

只捕获能够修复的最窄异常。不要用一个 except Exception 包住整个建模流程,否则会丢失操作边界和诊断上下文。

结构化诊断

Diagnostic 包含:

字段含义
severity可供程序分支的级别,常见为 errorwarning 或信息级别
code用于测试和自动修复的稳定诊断键
message面向人的说明
hint可选修复建议
data额外 JSON-safe 证据

程序应按 code 分支,不要解析 message 文本。

OperationReport 记录操作、状态、输出元数据、诊断和归一化参数,ok 是受支持的成功判断。OperationResult 把返回值与报告组合在一起。

result = model.apply("fillet", body, radius=2.0, edges=(0, 4))
if not result.report.ok:
for item in result.report.diagnostics:
print(item.code, item.message, item.hint)
else:
body = result.value

预检与执行

Model.preflight(operation, *args, **kwargs) 在不执行原生几何的情况下检查已知操作、必要参数、常见调用错误与能力状态。Model.apply(...) 先预检再执行,并同时返回值和报告。

预检不是几何证明。即使报告为 ready,原生构造、拓扑、文件 I/O 或求解仍可能失败。

验证报告

验证具有领域边界:

  • Shape.validate() 检查原生测量与基本拓扑状态;
  • Sketch 报告区分 solved、underconstrained 与 failed;
  • Assembly 报告提供残差和未满足约束;
  • Physical 与 Simulation 报告包含类型化问题与交叉引用检查;
  • Scene 验证覆盖 Manifest、资源、Schema、限制与包结构。

构建和修复阶段可用非严格模式收集证据;发布边界应使用严格重放或严格下沉,让无效状态立即终止流程。

恢复模式

  1. 构造领域对象前验证外部 Schema。
  2. 动态操作先检查能力并执行预检。
  3. 每次执行一个边界清晰的操作。
  4. 保留诊断代码、归一化参数和相关产物路径。
  5. 只修复调用方明确理解的错误,其余错误连同原始原因上报。
  6. 独立验证最终几何或产物,不把中间步骤成功视为最终正确。