錯誤訊息——是哪一行?JMP 可以幫助使用者尋找程式碼中的錯誤。如果程式碼中使用了未解析的名稱,JMP 會停止執行並顯示錯誤訊息,指出出錯的程式碼行。
print(1);
result = x + zzz_missing;

我們來稍微修改一下程式碼。當 JMP 運行這段程式碼時
myFunc = Function( {x},
{},
result = x + zzz_missing;
Return( result );
);
myFunc( 3 );
它再次返回錯誤訊息:

但它指向程式碼的第 3 行,也就是 x 的定義處。這非常令人驚訝:錯誤「發生」在第 4 行:使用者漏掉了用於保護結果的名稱 expr()函數——而 JMP 錯誤地計算了這個表達式!
由於我們已經在另一篇文章中討論過這種行為( 錯誤追蹤:JMP 嘗試「幫助」 ),我們將直接進入下一個令人驚訝的情況。
事實上,更令人驚訝的是這段程式碼的錯誤訊息:
myFunc = Function( {x},
{Default Local},
result = x + zzz_missing;
Return( result );
);
myFunc( 3 );

-> 這條線路沒有任何資訊! ? ! ——甚至連錯誤訊息都沒有。
為什麼?
自動化和腳本編寫回覆:錯誤訊息——是哪一行?Try() 也存在同樣的限制:無法取得程式碼行資訊。
Try(
result = zzz_missing;
Print( 1 );
,
Print( exception_msg )
);

回覆:錯誤訊息——是哪一行?是否有命令
例如,日誌擷取函數 Capture()或嘗試()即使在封閉表達式中出現錯誤也不會停止。
傳回導致錯誤的程式碼行?
回覆:錯誤訊息——是哪一行?日誌捕獲
根據腳本索引,它會將輸出捕獲到日誌中並將其作為字串傳回。

但它的功能遠不止這些!
它的作用類似於try() 函數-允許在被求值的表達式中出現致命錯誤後繼續執行程式碼。
log=Log capture(
result = zzz_missing;
print(1)
);
Print(2);
Show(log)
print(1)被跳過 - print(2)被執行。

幾乎完美。可惜的是,它忘記寫出出錯的程式碼行!
回覆:錯誤訊息——是哪一行?啊: 文斯法勒的錯誤類型

@Ryan_Gilmore ,請問您能否重新啟用投票功能?
@Ben_BarrIngh , @russ_wolfinger ,供您參考。
回覆:錯誤訊息——是哪一行?或許可以把這個請求和這個請求合併起來:
改進了錯誤日誌中的 JSL 堆疊追蹤
回覆:錯誤訊息——是哪一行?順便問一下,有人知道異常訊息中回傳的是什麼嗎?

1?
2?
回覆:錯誤訊息——是哪一行?JSL 程式碼能否觸發「子」程式的執行,而該子程式可能會因出錯而終止並顯示錯誤訊息?
主程式碼仍然會繼續運行,無論是在子程式執行完畢之後,還是在子程式執行終止之後?
回覆:錯誤訊息——是哪一行?// demo command
MyExpr = Expr(
Print( 1 );
z = 5;
x = xyz;
Print( 2 );
);
stopnow = 0; // if there is an error, don't execute subsequent blocks of code
summary = "";
// execute blocks of code and collect replies and error messages
For Each( {part, line}, Name Expr( myExpr ),
Try(
Eval( Name Expr( part ) );
new = "";
,
new = "part " || Char( line ) || ": " || Char( Name Expr( part ) ) || "\!n" || Char( exception_msg );
stopNow = 1;
);
Wait( 0 );
summary = summary || new || (tmp = Char( Get Log( -1 )[1] ) ; If( tmp == "/*:", "", "\!N" || tmp || "\!N" ));
Clear Log();
If( stopnow, break() );
);
Show(summary);

假設程式碼很簡單,每個程式碼區塊最多只有 1 個回應。
可以輕鬆擴展以處理更複雜的程式碼。