错误处理

postscript 中有两个错误处理级别。这种二分法既适用于解释器处理错误的方式,也适用于用户(程序员)控制处理的可用方法。

下层是一个不寻常的控制结构 stop ... stoppedstopped 的行为很像循环结构,因为它在执行堆栈上建立了一个标记,如果调用 exit 运算符(用于循环)或 stop 运算符(用于 stopped-context),则可以跳转到该标记。与循环结构不同,stopped 在堆栈上产生一个布尔值,表示是否调用了 stop(否则传递给 stopped 的过程已经执行完毕。

当发生 PostScript 错误时,例如 stackunderflow,解释器会在生活在 systemdict 中的 errordict 中查找错误的名称。如果用户没有替换 errordict 中的过程,则默认错误过程将拍摄所有堆栈的快照并将它们放在 $error 中,这是 systemdict 中的另一个字典。最后,默认程序将调用 stop,它从 exec 堆栈弹出用户程序,并在 errordict 中执行解释器的错误打印过程 handleerror

因此,使用所有这些知识,你可以通过在 { ... } stopped 中包含一段代码来捕获错误。你可以通过调用 stop 重新抛出错误。你可以确定 $error /errorname get 发生的错误类型。

你还可以通过在 errordict 中使用该名称替换过程来更改特定类型错误的默认行为。或者通过替换 errordict 中的/handleerror 来更改打印错误报告的格式。