2016-09-14 120 views
0

在Python中,如果遇到錯誤(例如,函數參數是錯誤的數據類型,由於格式錯誤等原因無法對數據進行操作),我向終端輸出錯誤,運行sys.exit()來殺死它。我還沒有到處學習錯誤處理,異常處理或其他什麼,所以這就是我使用這種方法的原因。 JavaScript錯誤/異常/無論處理看起來簡單,但會引發或拋出代碼的執行?如果沒有,那我該怎麼做?在JavaScript中停止執行

說我只想要一個函數(和擴展,整套代碼)工作,如果我所在的頁面匹配特定的URL。當頁面是錯誤的URL時調用該函數應該將消息記錄到控制檯並停止腳本的執行。我怎麼做?只需在try區塊進行測試?我是否需要使用一些用於處理錯誤/異常的特殊語法?

+0

是的,這就是JS(和Python)中的異常工作。拋出代碼的執行直到最接近的catch處理程序。 – Bergi

+0

您還需要考慮代碼的性質(異步或同步)。例如,在HTTP請求之後拋出錯誤不會停止請求,也不會有任何關聯的回調。 – MinusFour

+0

@Bergi我沒有想到。我認爲'catch'可以用來報告錯誤,然後退出。我在我的函數中使用它,我仍然得到一個對象返回。 – Melab

回答

0

當頁面錯誤的URL時調用該函數應向控制檯記錄消息並停止腳本的執行。我怎麼做?

如果URL不可接受,請輸入error並附上問題描述。例如

throw new Error("operation x not supported at this page location"); 

這會導致消息被記錄到控制檯。確保在throw語句周圍控制try...catch語句的缺席,或者在導致該語句的任何函數調用周圍,在拋出錯誤時暫停執行。

正如評論中提到的,拋出異常不會取消尚未從已啓動但未完成的異步操作進行的回調。

如果try...catch語句是在效果時引發錯誤,執行與不按throw語句的(其他)代碼進一步執行控制catch語句恢復,並且在不恢復中介函數調用。


編輯迴應評論:

,沒有抓住它的功能不返回內執行throw語句的功能。也就是說,它不會在調用代碼後立即返回值並立即恢復執行。

如果用戶編寫的try塊圍繞直接或間接調用引發該錯誤的函數,調用堆棧將恢復爲執行try塊時生效的調用堆棧。在try塊中爲函數調用而創建的任何堆棧框架將從調用堆棧中彈出並丟棄,而無需進一步執行調用的函數。執行繼續執行與try塊關聯的catch塊,傳遞作爲catch參數拋出的錯誤,或者如果沒有提供catch塊,則在finally塊中執行。 系統不會自動將在try塊內拋出的錯誤記錄到控制檯。

如果找不到用戶寫入的try塊,則會彈出所有調用堆棧幀,線程死亡並將拋出的錯誤記錄到控制檯。因此,在try塊之外拋出一個錯誤會停止執行,而不調用退出函數。

Python中的try...cacth的等價物似乎是try...exceptraise語句用於throw,語法略有不同。

+0

這是否會阻止使用它的函數返回對象? – Melab

+0

那麼如何調用產生錯誤的函數應該停止?在Python中,如果我編寫將錯誤類型傳遞給特定函數的函數,則所有執行都將停止。 – Melab