💬

【wenyan-lang / 文言】Error Handling 口語解 try catchの仕方

2023/08/11に公開

文言でerror handlingを行う方法

当然乍ら、文言ではtry...catch...と記述することはなく、何となれば、文言は漢字を用いるからであります。

そこで文言では、これを漢語で以て実装し、online IDEにて次の如く用例を示されています。

異常處理示例

姑妄行此。
 嗚呼。「「滅頂」」之禍。

如事不諧。豈「「虛指」」之禍歟。
 吾有一言。曰「「本無此物。奈何用之」」。書之。

豈「「文法」」之禍歟。
 吾有一言。曰「「不合文法。不通之甚」」。書之。

豈「「異類」」之禍歟。
 吾有一言。曰「「物各其類。豈可混同」」。書之。

豈「「滅頂」」之禍歟。
 吾有一言。曰「「嗚呼哀哉。伏维尚飨」」。書之。

不知何禍歟。名之曰「奇禍」。
 吾有一言。曰「「人坐家中。禍從天降」」。書之。

乃作罷。


姑妄行此。
 嗚呼。「「無足輕重」」之禍。
如事不諧乃作罷。


姑妄行此。
 嗚呼。「「事不關心」」之禍。曰「「事不關心。關心者亂」」

如事不諧。不知何禍歟。名之曰「禍」。夫「禍」之「「名」」。書之。乃作罷。
Output
嗚呼哀哉。伏维尚飨
事不關心

単にtrycatchを漢訳したのではなく、なかなか難しい表現を採用せられたので、浅聞の私が一目見たのでは理解に至りませんでした。仔細は後程審らかにするとして、先ずはこれに倣い、基本の扱い方を明らかにしましょう。

先にWikiを御覧になりたい方はこちら
Error Handling

簡単な用例

今目標とする機序を、JavaScriptで起草して共有致しましょう。

error(JavaScript)
try {
    throw new Error();
} catch (error) {
    console.log("ERROR");
}

これを実行すると次のように表示されます。

Output
ERROR

ERRORと文字で通告するようなerrorを意図的に引き起こす、単純な機序です。これを文言で書き表せば、次の通りになります。

error(文言)
姑妄行此
嗚呼「「誤謬」」之禍
如事不諧不知何禍歟
吾有一言曰「「ERROR」」書之
乃作罷
Output
ERROR

上の通り、句点「。」はなくとも問題ありません。

定型

要点を抜粋すれば次の通りです。

姑妄行此
嗚呼「「発出するerror名(文字列)」」之禍
如事不諧不知何禍歟
吾有一言曰「「通告文(文字列)」」書之
乃作罷

始めはこれを定型として覚えておくことと致します。

特定のerrorに対する処置を定める(if else)

先ほど示した例は、不明なerror全般に対する処置を一つ定めた、迚も簡単なものでありました。併し、未だ始めに挙げた例の理解には及びません。茲で文意に注意するべく、敢えて先の例を次のように発展させました。

不明なerrorとして対処する場合
姑妄行此
嗚呼「「誤謬」」之禍曰「「ERROR」」
如事不諧
不知何禍歟
名之曰「Error」
夫「Error」之「「名」」書之
夫「Error」之「「文」」書之
乃作罷
Output
誤謬
ERROR

この内、姑妄行此try如事不諧catch不知何禍歟elseに当ります。併し乍ら、ifに当るものは未だ存在しませんので、増訂致しましょう。

想定されたerrorとして対処する場合
姑妄行此
嗚呼「「誤謬」」之禍曰「「ERROR」」
如事不諧
豈「「誤謬」」之禍歟
名之曰「Error」
夫「Error」之「「名」」書之
夫「Error」之「「文」」書之
不知何禍歟
名之曰「不知之」
夫「不知之」之「「名」」書之
吾有一言曰「「UNKNOWN ERROR」」書之
乃作罷

豈「「誤謬」」之禍歟ifに当ります。

Output
誤謬
ERROR

確認

茲で一度、文言で書いたものをJavaScriptに書き起こして、双方を照らし合わせましょう。

JavaScriptでの表現
try {
    let e = new Error("ERROR");
    e.name = "誤謬";
    throw e;
} catch (error) {
    if (error.name == "誤謬") {
        let Error = error;
        console.log(Error.name);
        console.log(Error.message);
    } else {
        let 不知之 = error;
        console.log(不知之.name);
        console.log("UNKNOWN ERROR");
    }
}

二者は次の通り対応します。

文言 JavaScript
姑妄行此

不知何禍歟

乃作罷
try {

} catch (error) {

}
嗚呼「「誤謬」」之禍曰「「ERROR」」 let e = new Error("ERROR");
e.name = "誤謬";
throw e;
豈「「誤謬」」之禍歟 if (error.name == "誤謬")
名之曰「Error」
夫「Error」之「「名」」書之
夫「Error」之「「文」」書之
let Error = error;
console.log(Error.name);
console.log(Error.message);
不知何禍歟 else
名之曰「不知之」
夫「不知之」之「「名」」書之
吾有一言曰「「UNKNOWN ERROR」」書之
let 不知之 = error;
console.log(不知之.name);
console.log("UNKNOWN ERROR");

確認問題:冗を探す

以上を受けて、始めに挙げた例から使用されない変数を検出しましょう。

異常處理示例(一部)
姑妄行此。
 嗚呼。「「滅頂」」之禍。

如事不諧。豈「「虛指」」之禍歟。
 吾有一言。曰「「本無此物。奈何用之」」。書之。

豈「「文法」」之禍歟。
 吾有一言。曰「「不合文法。不通之甚」」。書之。

豈「「異類」」之禍歟。
 吾有一言。曰「「物各其類。豈可混同」」。書之。

豈「「滅頂」」之禍歟。
 吾有一言。曰「「嗚呼哀哉。伏维尚飨」」。書之。

不知何禍歟。名之曰「奇禍」。
 吾有一言。曰「「人坐家中。禍從天降」」。書之。

乃作罷。
解答

名之曰「奇禍」。の部で定められている変数奇禍は使用されません。

主要のerror

文言は、元より幾つかerrorを定めています。

漢語 英語
文法 SyntaxError
逾界 RangeError
異類 TypeError
虛指 ReferenceError

俚言解

以降は、機序ではなく語意に着目して読み解いて参ります。

基本文法の意味

基本の結構
姑妄行此
・・・
如事不諧
豈「「~~」」之禍歟
・・・
不知何禍歟
・・・
乃作罷

姑妄行此

姑は姑息と言うように「しばらく」の意、妄は「みだり」の意でありますから、「姑妄行此」とは「姑く妄りに此を行う」の意味であろうと考察されます。tryは失敗し得る処理を行う際のものですから、失敗するまでは行うという意味で解釈できます。

如事不諧

如は「もし」の意、諧は諧和、諧調と言うように「かなう」、「ととのう」の意でありますから、「如事不諧」は「如し事の諧はざれば」の意味であろうと考察されます。tryでの処理が失敗したことを「事不諧」と表現したのでしょう。

豈「「~~」」之禍歟

豈は疑問の副詞「あに」の意、禍はerrorの意、歟は疑問の助詞「か」の意でありますから、「豈「「~~」」之禍歟」は「豈に~~のerrorか」の意味であろうと考察されます。上述の通り、errorの種類によって処理を分けんがための言葉です。

不知何禍歟

禍はerrorの意、歟は疑問の助詞「か」の意でありますから、「不知何禍歟」は「何のerrorかを知らず」の意味であろうと考察されます。豈「「~~」」之禍歟で定めない全てのerrorを請け負います。

乃作罷

乃は「すなわち」、「ただちに」の意、罷は「やめる」の意でありますから、「乃作罷」は「乃ち罷と作す」、「乃ち罷む」の意味であろうと考察されます。try...catch...の終端を示すための言葉であります。

error

逾界

逾は「こえる」の意ですから、「界を逾ゆ」の意味となります。

例中の語

文字列や変数名として現れる語を紹介致します。

「「滅頂」」之禍。

滅頂は「溺れる」こと。即ち滅頂の禍とは、「溺死」、「破滅」の意にして、茲では「破滅」の意味を用いているものと考察されます。
https://www.kanjipedia.jp/kotoba/0006703000

曰「「嗚呼哀哉。伏维尚飨」」。

全唐文卷二百六より祭韋府君文が出典でありましょう。嗚呼哀哉は「あゝ哀しきかな」の意。伏維は本来「伏惟」と書き、「伏して惟ふ」、「謹んで考える」の意。尚は「こいねがわくは」、饗は「うける」の意より、「尚くは(祭礼のもてなしを)饗けんことを」の意にして祭文の終辞であろうと推察されます。亡き人に思いを馳せる文章です。
https://chdict.conomet.com/word/伏惟/
https://toukaen.cocolog-nifty.com/blog/2018/12/post-a98f.html

曰「「人坐家中。禍從天降」」。

「人、家の中に坐りて、禍、天より降る」の意味で、中国では「人在家中坐,鍋從天上来」という言葉が流行しました。「人は思いもよらない災難を避けられない」ことの比喩であることから、「思いがけないerror」を表す語として用いられており、諧謔を弄せんの試みが推し量られます。
https://baike.baidu.com/item/人在家中坐,锅从天上来/22100736

無足輕重

無足輕重は「取るに足らない」意の言葉です。

無足輕重
姑妄行此。
 嗚呼。「「無足輕重」」之禍。
如事不諧乃作罷。

この機序から得られる結果は何もありません。「取るに足らない」からこそ、何も処理を行っていないのです。
https://dict.revised.moe.edu.tw/dictView.jsp?ID=159286&la=0&powerMode=0

曰「「事不關心。關心者亂」」

「何事も気にしない方がよい。一度気になれば心が乱れる。」という意味の諺です。
https://books.google.co.jp/books?id=lVQ0AQAAIAAJ&pg=PA128&lpg=PA128&dq=事不關心+關心者亂&source=bl&ots=R8-LZWvBmA&sig=ACfU3U2AmwgA2hiGruTeRF4Pb65Np9k42Q&hl=ja&sa=X&ved=2ahUKEwi4irPRtdSAAxVkmlYBHYYRA3AQ6AF6BAgWEAM#v=onepage&q=事不關心 關心者亂&f=false

Discussion