有时我的代码崩溃了,这超出了我的控制范围
我该怎么做呢?
try {
//do my stuff
}
catch {
//sleep and try again
}
代码不是很多,所以都是一个函数,所以如果没有必要,我不想创建和调用另一个函数
发布于 2014-07-29 03:27:00
您可以尝试如下所示:
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");
$NUM_OF_ATTEMPTS = 5;
$attempts = 0;
do {
try
{
executeCode();
} catch (Exception $e) {
$attempts++;
sleep(1);
continue;
}
break;
} while($attempts < $NUM_OF_ATTEMPTS);
function executeCode(){
echo "Hello world!";
}
在这里,我们执行一个do...while
循环,以便代码至少执行一次。如果executeCode()
函数遇到错误,它将抛出try...catch
块将捕获的Exception
。然后,catch
块将使变量$attempt
递增1,并调用continue
为下一次迭代测试while
条件。如果已经进行了五次尝试,则循环将退出,脚本可以继续。如果没有错误,即未执行来自catch
块的continue
语句,则循环将执行break
,从而结束脚本。
注意取自here的set_error_handler
函数的用法。我们这样做是为了捕获executeCode()
函数中的所有错误,即使我们自己不手动抛出错误。
如果您认为您的代码可能会多次失败,那么在continue
语句之前使用sleep()
函数可能是有益的。“放慢”可能的无限循环将有助于降低你的CPU Usage
。
让脚本无限运行直到成功并不是一个好主意,因为在循环的前100次迭代中出现的错误不太可能得到解决,从而导致脚本“冻结”。通常情况下,最好是在出现错误的情况下重新评估您希望多次运行的代码,并对其进行改进以正确处理出现的任何错误。
发布于 2018-05-23 17:41:11
简单地说:
function doSomething($params, $try = 1){
try{
//do something
return true;
}
catch(Exception $e){
if($try <5){
sleep(10);
//optionnaly log or send notice mail with $e and $try
doSomething($params, $try++);
}
else{
return false;
}
}
}
发布于 2018-08-15 18:41:37
这里有一个简单的算法:
do{
try {
$tryAgain = false;
/* Do everything that throws error here */
}
catch(Exception $e) {
$tryAgain = true;
/* Do error reporting/archiving/logs here */
}
} while($tryAgain);
https://stackoverflow.com/questions/25002164
复制相似问题