錯誤處理

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