是否可以捕獲異常並繼續執行腳本?php:捕獲異常並繼續執行,有可能嗎?
回答
當然,正好趕上要繼續執行異常...
try
{
SomeOperation();
}
catch (SomeException $e)
{
// do nothing... php will ignore and continue
}
當然,這有默默下降,這可能是一個非常重要的錯誤的問題。 SomeOperation()可能會失敗,導致其他細微的難以解決的問題,但是你永遠不會知道你是否默默地放棄了異常。
肯定的:
try {
throw new Exception('Something bad');
} catch (Exception $e) {
// Do nothing
}
你可能想去有PHP文檔的讀取上Exceptions。
是的。
try {
Somecode();
catch (Exception $e) {
// handle or ignore exception here.
}
但是請注意,PHP也有錯誤代碼從異常分開,遺留以前的PHP有oop原語。大多數庫buildin仍然會產生錯誤代碼,而不是例外。要忽略錯誤代碼調用該函數帶有前綴@:
@myfunction();
是的,但是這取決於你想執行什麼:
例如
try {
a();
b();
}
catch(Exception $e){
}
c();
c()
將始終執行。但如果a()
引發異常,b()
是而不是執行。
只把東西放在相互依賴的try
塊中。例如。 b
取決於a
的一些結果,在try-catch
塊之後放b
是沒有意義的。
如果我有剩下的選票,我會把它放在這個... :) – 2010-01-25 15:30:28
我代表你做了:) – 2015-11-05 08:02:33
'$ e'需要是'\ Exception $ e'或simular或解析錯誤拋出 – iautomation 2016-03-01 21:29:38
另一個角度是從處理代碼返回一個異常,而不是拋出一個異常。
我需要用我正在編寫的模板框架來做到這一點。如果用戶嘗試訪問數據中不存在的屬性,則我將返回處理函數內部深處的錯誤,而不是拋出它。
然後,在調用代碼,我可以決定是否拋出這個返回的錯誤,導致了嘗試()趕上(),或者只是繼續:
// process the template
try
{
// this function will pass back a value, or a TemplateExecption if invalid
$result = $this->process($value);
// if the result is an error, choose what to do with it
if($result instanceof TemplateExecption)
{
if(DEBUGGING == TRUE)
{
throw($result); // throw the original error
}
else
{
$result = NULL; // ignore the error
}
}
}
// catch TemplateExceptions
catch(TemplateException $e)
{
// handle template exceptions
}
// catch normal PHP Exceptions
catch(Exception $e)
{
// handle normal exceptions
}
// if we get here, $result was valid, or ignored
return $result;
這樣做的結果是我仍然得到原始錯誤的上下文,即使它被放在最上面。
另一個選擇可能是返回一個自定義的NullObject或一個UnknownProperty對象,並在決定跳過catch()之前進行比較,但是因爲您可以重新拋出錯誤,並且如果完全控制了總體結構,我認爲這是一個乾淨利落的問題,無法繼續嘗試/捕捉。
一個古老的問題,但我曾經從VBA scipt轉到php,在那裏你可以讓我們「去」重新進入一個循環「On Error」與一個「簡歷」並離開它去了仍在處理該功能。
在php中,經過一些試驗和錯誤之後,我現在使用嵌套try {} catch {}來處理關鍵和非關鍵的流程,甚至是相互依賴的類調用,這樣我就可以追溯到錯誤的開始。 例如如果函數B依賴於功能,但功能c是不錯的,但不應該停止的過程中,我還是想知道的所有3不顧後果,這是我做的:
//set up array to capture output of all 3 functions
$resultArr = array(array(), array(), array());
// Loop through the primary array and run the functions
foreach($x as $key => $val)
{
try
{
$resultArr[$key][0][] = a($key);
$resultArr[$key][1][] = b($val);
try
{ // If successful, output of c() is captured
$resultArr[$key][2][] = c($key, $val);
}
catch(Exception $ex)
{ // If an error, capture why c() failed
$resultArr[$key][2][] = $ex->getMessage();
}
}
catch(Exception $ex)
{ // If critical functions a() or b() fail, we catch the reason why
$criticalError = $ex->getMessage();
}
}
現在我可以遍歷每個鍵的結果數組並評估結果。 如果()或b()存在嚴重故障。
在$ resultArr發生嚴重故障之前,我還有一個參考點,如果異常處理程序設置正確,我知道它是否是()或b()失敗。
如果c()失敗,循環繼續。如果c()在各個點失敗了,再加上一些額外的後循環邏輯,我甚至可以通過詢問$ resultArr [$ key] [2]來發現c()是否工作或每次迭代都有錯誤。
- 1. 繼續執行程序捕獲異常
- 2. 拋出並捕獲異常後繼續執行代碼
- 3. 捕獲異常後繼續執行程序執行
- 4. 的SQL Server捕獲異常,並繼續
- 5. 如何捕獲所有未捕獲的異常並繼續?
- 6. 繼續執行異常
- 7. 獲取所有目錄和捕獲權限異常並繼續
- 8. 如何捕獲異常但導致perl腳本繼續執行?
- 9. 在try/catch中捕獲異常後繼續執行循環
- 10. 如何在捕獲異常後繼續執行?
- 11. 捕捉異常並繼續執行程序是最佳實踐嗎?
- 12. 繼續捕捉異常
- 13. 即使有異常情況,flyway能否繼續執行腳本?
- 14. 捕捉異常,然後拋出/發送異常並繼續
- 15. 試着抓住異常繼續執行
- 16. Python:我如何捕獲異常並繼續?
- 17. python捕獲異常,並繼續嘗試塊
- 18. 循環中的Oracle PL/SQL捕獲鎖異常並繼續
- 19. PHP:捕獲級聯中的異常。可能嗎?
- 20. PHP如何捕獲SendMail上的DeadlineExceededError以繼續執行腳本
- 21. C++,忽略異常並繼續執行代碼?
- 22. 異常捕捉後流量繼續
- 23. 如何在獲得異常後繼續執行線程
- 24. 是否有可能捕獲除運行時異常外的所有異常?
- 25. 理解捕獲異常並在多線程代碼中執行延續
- 26. XCTAssertThrows可以捕獲C++異常嗎?
- 27. php - 合併嘗試/捕獲異常
- 28. 如何捕捉異常並繼續程序? C#
- 29. 如何捕捉異常並繼續在Java中的處理
- 30. 異常後繼續
嘎!擊敗我21秒。 – 2010-01-25 14:12:05
如果我可能會添加:在catch塊中沒有做任何事情的情況下捕獲一個異常被認爲是不好的風格,那麼你至少應該寫一些日誌輸出(或者,如在示例中,提供一個評論,確實,真的,真的沒有必要完成)。如果您捕獲_any_異常並且catch(Exception $ ex){} – dbemerlin 2010-01-25 14:13:25
,那麼尤其如此,那麼如何記錄它並仍然繼續? – numerical25 2013-02-11 14:18:14