是否可以捕获异常并继续执行脚本?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. 的SQL Server捕获异常,并继续
- 3. 继续执行异常
- 4. 如何捕获异常但导致perl脚本继续执行?
- 5. 继续捕捉异常
- 6. 试着抓住异常继续执行
- 7. 循环中的Oracle PL/SQL捕获锁异常并继续
- 8. PHP:捕获级联中的异常。可能吗?
- 9. C++,忽略异常并继续执行代码?
- 10. 异常捕捉后流量继续
- 11. 如何在获得异常后继续执行线程
- 12. 理解捕获异常并在多线程代码中执行延续
- 13. 如何捕捉异常并继续在Java中的处理
- 14. 如何捕捉异常并继续程序? C#
- 15. 是否有可能从异常继续循环?
- 16. C#:如何在任务中捕获取消异常。继续
- 17. GDB:捕获信号并继续调试
- 18. RxJs捕获错误并继续
- 19. 在PHP中捕获运行时异常
- 20. Python跳出异常声明并继续
- 21. PDO PHP未捕获异常
- 22. 有没有可能在捕获异常时手动引发系统异常?
- 23. PHP中所有未捕获的异常是致命的吗?
- 24. 捕获块没有捕获异常
- 25. 是否有可能使用aspectj捕获所有异常?
- 26. 如何在未被捕获的DOMException之后继续执行?
- 27. Erlang中的异常处理继续执行
- 28. python映射异常继续映射执行
- 29. 当发生异常时继续执行循环
- 30. C#抛出异常后继续执行程序
嘎!击败我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