错误处理
postscript 中有两个错误处理级别。这种二分法既适用于解释器处理错误的方式,也适用于用户(程序员)控制处理的可用方法。
下层是一个不寻常的控制结构 stop ... stopped
。stopped
的行为很像循环结构,因为它在执行堆栈上建立了一个标记,如果调用 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
来更改打印错误报告的格式。