錯誤處理
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
來更改列印錯誤報告的格式。