模板:TryError
此模板被引用于约24,000个页面。 为了避免造成大规模的影响,所有对此模板的编辑应先于沙盒、测试样例或您的沙盒上测试。 测试后无误的版本可以一次性地加入此模板中,但是修改前请务必于讨论页发起讨论。 模板引用数量会自动更新。 |
概要
本模板实现了try...catch...finally的结构
而若用{{#iferror:}}无法根据错误种类来做处不同处理,而若用嵌套解析器,对于部分高开销操做是不利的,因此提供一个类似程式码的方式来实现。而考量到en:Template:Try模板存在,因此仔不影响使用的情况以TryError命名。
参数及使用方法
{{TryError |<可能有錯誤的維基代碼> |catch(<錯誤的class>)=<發生對應錯誤的處置> |catch=<發生通用錯誤的處置> |finally=<無論是否錯誤都會顯示的維基代碼> }}
模板参数
本模板用来输出错误讯息到标准输出,实现了try...catch...finally的结构
参数 | 描述 | 类型 | 状态 | |
---|---|---|---|---|
可能有脚本错误的维基代码 | 1 | 用来处理脚本错误的维基代码
| 字符串 | 可选 |
代码出现其他错误的错误讯息 | catch | 若该代码出现其他错误时才会输出该错误讯息
| 字符串 | 可选 |
代码出现特定类型错误的错误讯息 | catch(類型) | 若该代码出现某个指定类型的错误时才会输出该错误讯息,而类型应该在括号里指定
| 字符串 | 可选 |
不论代码是否有错都一定会出现的讯息 | 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>}}
- 输出
- 解析失败 (SVG(MathML可通过浏览器插件启用):从服务器“http://localhost:6011/zh.wikipedia.org/v1/”返回无效的响应(“Math extension cannot connect to Restbase.”):): {\displaystyle \你好}
- 输出
{{TryError |<math>\你好</math> |catch={{{no error}}} }}
- 输出
- 解析失败 (语法错误): {\displaystyle \你好}
- 输出