Template:TryError
![]() | 此Template被引用於約8,700個頁面中。 為了避免造成大規模的影響,所有對此Template的編輯應先於沙盒、測試樣例或您的用户页上測試。 測試後無誤的版本可以一次性地加入此Template中,但是修改前請務必於討論頁發起討論。 |
概要
本模板實現了try...catch...finally的結構
而若用{{#iferror:}}無法根據錯誤種類來做處不同處理,而若用嵌套解析器,對於部分高開銷操做是不利的,因此提供一個類似程式碼的方式來實現。而考量到en:Template:Try模板存在,因此仔不影響使用的情況以TryError命名。
參數及使用方法
{{TryError |<有錯誤的維基代碼> |catch(<錯誤的class>)=<發生對應錯誤的處置> |catch=<發生通用錯誤的處置> |finally=<無論是否錯誤都會顯示的維基代碼> }}
範例
- 無錯誤的維基代碼搭配try...catch:
{{TryError |無錯誤的維基代碼 |catch= }}
無錯誤的維基代碼
- 移除有錯誤的維基代碼:
{{TryError |這些{{#expr:0/0}}有錯誤 |catch={{{no error}}} }}
- 輸出:
- 這些有錯誤
- 輸出:
- 有錯誤的維基代碼:
{{#expr:0/0}}{{wikidata|label|raw|0/0}}
- 輸出:
- 零除。ID“0/0”在系统中是未知的。请使用一个有效的实体ID。
- 輸出:
- 有錯誤的維基代碼搭配try...catch:
{{TryError |{{#expr:0/0}}{{wikidata|label|raw|0/0}} |catch= }}
- 輸出:
- 輸出:
- try...catch...finally
{{TryError |{{#expr:0/0}}{{wikidata|label|raw|0/0}}{{User 超電磁炮|level=1/0|name=零除錯誤|call=除錯}} |catch=發生{{{message}}}錯誤! |finally=結束 }}
- 輸出:
- 發生零除。ID“0/0”在系统中是未知的。请使用一个有效的实体ID。零除。錯誤!結束
- 輸出:
- try並catch 「scribunto-error」錯誤和一般catch:
{{TryError |{{#expr:0/0}}{{wikidata|label|raw|0/0}} |catch(scribunto-error)=發生{{{message}}}錯誤! |catch=發生{{{message}}}錯誤! |finally=結束 }}
- 輸出:
- 發生ID“0/0”在系统中是未知的。请使用一个有效的实体ID。錯誤!結束
- 輸出:
- try並提供空的一般catch:
{{TryError |{{#expr:0/0}}{{wikidata|label|raw|0/0}} |catch= |finally=結束 }}
- 輸出:
- 結束
- 輸出:
- try並throw:
{{TryError |{{#expr:0/0}}{{wikidata|label|raw|0/0}} |catch(scribunto-error)={{{throw}}} |finally=結束 }}
- 輸出:
- ID“0/0”在系统中是未知的。请使用一个有效的实体ID。結束
- 輸出:
- try並throw其他錯誤:
{{TryError |{{#expr:0/0}}{{wikidata|label|raw|0/0}} |catch(scribunto-error)={{參數|throw|foo(throw其他錯誤)}} |finally=結束 }}
- 輸出:
- throw其他錯誤結束
- 輸出:
- 巢狀try...catch:
{{TryError |{{#expr:0/0}}{{wikidata|label|raw|0/0}}{{TryError|{{#expr:0/0}}|catch={{參數|throw|foo(throw其他錯誤)}} }} |catch(foo)=接到foo錯誤 |finally=結束 }}
- 輸出:
- 接到foo錯誤結束
- 輸出:
- 未能提供匹配的錯誤catch:
{{TryError |{{#expr:0/0}}{{wikidata|label|raw|0/0}} |catch(foo)=接到foo錯誤 |finally=結束 }}
- 輸出:
- 未處理的例外狀況:零除。ID“0/0”在系统中是未知的。请使用一个有效的实体ID。結束
- 輸出:
技術限制
與#iferror一樣,本模板無法處理來自擴展標籤(如<math>...</math>)的錯誤
{{#iferror:<math>\你好</math>}}
- 輸出
- 解析失败 (语法错误): {\displaystyle \你好}
- 輸出
{{TryError |<math>\你好</math> |catch={{{no error}}} }}
- 輸出
- 解析失败 (语法错误): {\displaystyle \你好}
- 輸出
注意事项
模板编辑说明
參見
上述文档嵌入自Template:TryError/doc。 (编辑 | 历史) 编者可以在本模板的沙盒 (创建 | 镜像)和测试样例 (创建)页面进行实验。 请在/doc子页面中添加分类。 本模板的子页面。 |