模板:TryError/doc

概要

本模板實現了try...catch...finally的結構

而若用{{#iferror:}}無法根據錯誤種類來做處不同處理,而若用嵌套解析器,對於部分高開銷操做是不利的,因此提供一個類似程式碼的方式來實現。而考量到en:Template:Try模板存在,因此仔不影響使用的情況以TryError命名。

參數及使用方法

{{TryError
|<可能有錯誤的維基代碼>
|catch(<錯誤的class>)=<發生對應錯誤的處置>
|catch=<發生通用錯誤的處置>
|finally=<無論是否錯誤都會顯示的維基代碼>
}}

模板參數

以下是該模板的模板資料,適用於視覺化編輯器等工具。

TryError模板資料

本模板用來輸出錯誤訊息到標準輸出,實現了try...catch...finally的結構

模板參數

此模板以參數區塊格式為優先。

參數描述類型狀態
可能有腳本錯誤的維基代碼1

用來處理腳本錯誤的維基代碼

範例
{{#expr:0/0}}
字串非必填
代碼出現其他錯誤的錯誤訊息catch

若該代碼出現其他錯誤時才會輸出該錯誤訊息

範例
出現不明錯誤
字串非必填
代碼出現特定類型錯誤的錯誤訊息catch(類型)

若該代碼出現某個指定類型的錯誤時才會輸出該錯誤訊息,而類型應該在括號裏指定

範例
出現Lua腳本錯誤
字串非必填
不論代碼是否有錯都一定會出現的訊息finally

若該代碼不論是否有錯都一定會出現的內容

範例
內容已除錯
字串非必填

範例

  • 無錯誤的維基代碼搭配try...catch:
{{TryError
|無錯誤的維基代碼
|catch=
}}

無錯誤的維基代碼


  • 移除有錯誤的維基代碼:
{{TryError
|這些{{#expr:0/0}}有錯誤
|catch={{{no error}}}
}}
輸出:
這些有錯誤

  • 有錯誤的維基代碼:
{{#expr:0/0}}{{link-wd|Q0/0}}
輸出:
除以零。ID「Q0/0」在系統中是未知的。請使用一個有效的實體ID。

  • 有錯誤的維基代碼搭配try...catch:
{{TryError
|{{#expr:0/0}}{{link-wd|Q0/0}}
|catch=
}}
輸出:

  • try...catch...finally
{{TryError
|{{#expr:0/0}}{{link-wd|Q0/0}}{{User 超電磁炮|level=1/0|name=零除錯誤|call=除錯}}{{Topic:Xo1mzbojtxmiusgl}}{{模板1}}
|catch=發生{{{message}}}錯誤!
|finally=結束
}}
輸出:
發生除以零。ID「Q0/0」在系統中是未知的。請使用一個有效的實體ID。除以零。無法嵌入結構式討論面板。檢測到模板循環:Template:模板1錯誤!結束

  • try並catch 「scribunto-error」錯誤和一般catch:
{{TryError
|{{#expr:0/0}}{{link-wd|Q0/0}}
|catch(scribunto-error)=發生{{{message}}}錯誤!
|catch=發生{{{message}}}錯誤!
|finally=結束
}}
輸出:
發生ID「Q0/0」在系統中是未知的。請使用一個有效的實體ID。錯誤!結束

  • try並提供空的一般catch:
{{TryError
|{{#expr:0/0}}{{link-wd|Q0/0}}
|catch=
|finally=結束
}}
輸出:
結束

  • try並throw:
{{TryError
|{{#expr:0/0}}{{link-wd|Q0/0}}
|catch(scribunto-error)={{{throw}}}
|finally=結束
}}
輸出:
ID「Q0/0」在系統中是未知的。請使用一個有效的實體ID。結束

  • try並throw其他錯誤:
{{TryError
|{{#expr:0/0}}{{link-wd|Q0/0}}
|catch(scribunto-error)={{參數|throw|foo(throw其他錯誤)}}
|finally=結束
}}
輸出:
throw其他錯誤結束

  • 巢狀try...catch:
{{TryError
|{{#expr:0/0}}{{link-wd|Q0/0}}{{TryError|{{#expr:0/0}}|catch={{參數|throw|foo(throw其他錯誤)}} }}
|catch(foo)=接到foo錯誤
|finally=結束
}}
輸出:
接到foo錯誤結束

  • 未能提供匹配的錯誤catch:
{{TryError
|{{#expr:0/0}}{{link-wd|Q0/0}}
|catch(foo)=接到foo錯誤
|finally=結束
}}
輸出:
未處理的例外狀況:除以零。ID「Q0/0」在系統中是未知的。請使用一個有效的實體ID。結束

技術限制

與#iferror一樣,本模板無法處理來自擴充功能標籤(如<math>...</math>)的錯誤

{{#iferror:<math>\你好</math>}}
輸出
解析失败 (语法错误): {\displaystyle \你好}

{{TryError
|<math>\你好</math>
|catch={{{no error}}}
}}
輸出
解析失败 (语法错误): {\displaystyle \你好}


注意事項

模板編輯說明

參見