JMP 11 中的異常處理<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />你好,
是否可以使用 try()/throw() 來查找特定的 JMP 異常?
我有一個調度程序,可以更新來自多個動態源的多個表。
我想捕獲丟失的文件、列或不正確的數據類型等內容,並將它們寫入 log.txt,以便在調度程序崩潰時我可以輕鬆查找和修復任何內容。 類似於java中的try和catch。
我知道函數 log capture() 存在,但是因為我使用 try() ,錯誤沒有機會寫入日誌。 它只是跳轉到我的 catch 表達式。
如果需要,我可以發布示例代碼。
謝謝!
回复:JMP 11 中的異常處理進一步調查。JSL try( ) 函數(和 LogCapture)確實可以做得更好;它忽略了可以通過 exception_msg 報告的幾種消息。最終結果是 try() 捕獲錯誤,但確切的錯誤消息被抑制(並且也不發送到日誌)。
我很確定不會出現異常消息可能性的列表。有時,exception_msg 是一個字符串,有時是一個列表(如前面的兩個示例所示)。
謝謝,我會將其添加到我的列表中 - Craige
回复:JMP 11 中的異常處理謝謝克雷格,這幾乎就是我們作為備用方法實施的方法。 我們強制我們的接口使用我們自己的異常消息變量,通過包裝器來解決問題。 您能夠闡明為什麼 JMP 的異常_msg 變量的某些輸出缺少任何信息。
是否有有關 exception_msg 變量的所有可能輸出以及觸發它們的異常的文檔?
我可以看到這在規劃中非常有用。
回复:JMP 11 中的異常處理在 JSL try() 函數的 catch 表達式中獲取反饋的唯一方法是通過 Exception_msg 變量,但該變量並不總是設置為有用的值。有時是這樣。您可以使用 JSL throw() 函數來設置它,如下所示:
嘗試(打印(“你好”);拋出(“爆炸!”),顯示(exception_msg))
“你好”
exception_msg =“砰!”;
因此,您可以使用如下內容包裝其他可能會產生異常的 JSL:
myOpen = 函數({文件},
嘗試(打開(文件),
throw(“無法打開”||文件||“詳細信息=”||char(exception_msg)))
);
嘗試( myopen("NOSUCHFILE.JMP"), show(exception_msg) );
exception_msg = "無法打開 NOSUCHFILE.JMP 詳細信息=。";
Open 沒有設置異常消息(上面沒有詳細信息),但是 sqrt(string value) 確實設置了(額外的詳細信息,下面):
mysqrt = 函數({v},
嘗試(平方(v),
throw("無法開方"||v|| "\!ndetails="||char(exception_msg)))
);
嘗試( mysqrt("減一"), write(exception_msg) );
無法開方減一
詳細信息={“無法將參數轉換為數字[或矩陣]”(1, "Sqrt", Sqrt /*###*/(v))}
所以你真的不需要 sqrt 的包裝器。通過將可能的 exception_msg 連接到您自己的更具啟發性的消息,如果 open 被增強以在將來返回異常消息,您將獲得更多詳細信息。exception_msg 周圍的 char() 函數將不存在的消息轉換為有效的字符串以進行串聯。
回覆:JMP 11 中的異常處理有人知道例外訊息中各個條目的意思嗎?
如今又多了一筆記錄:
details={"Cannot convert argument to a number [or matrix]"(1, 2, "Sqrt", Sqrt /*###*/(v))}
