模板: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>}}
输出
解析失败 (SVG(MathML可通过浏览器插件启用):从服务器“http://localhost:6011/zh.wikipedia.org/v1/”返回无效的响应(“Math extension cannot connect to Restbase.”):): {\displaystyle \你好}

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


注意事项

模板编辑说明

参见