try catch可以这样使用来处理异常吗?
Can try catch be used this way to handle exceptions?
Try catch
是用来处理异常的,但也可以这样用吗?
private $blockUrl = [];
public function doSomething($urls) {
try {
foreach ($urls as $key => $url) {
if (in_array($url, $this->blockUrl)) continue;
$meta[$url] = get_meta_tags($url);
unset($urls[$key]);
}
} catch (Exception $e) {
$this->blockUrl[] = $url;
return $this->doSomething($urls);
}
return $meta;
}
所以基本上它所做的是获取传递给方法的 url 的元标记。然后如果 get_meta_tags
发生异常,将抛出异常,并且将导致异常的 url 放入数组 $this->blockUrl
中。然后它会再次调用相同的方法,但这次只会再次验证剩余的 urls。
这是执行此逻辑的正确且有效的方法吗?
我在这里使用 try catch
是因为有时我在 get_meta_tags
上遇到 curl
错误,我只想跳过那些有这些错误的 url 并继续顺其自然。
将 try/catch
放入循环中:
public function doSomething($urls) {
$meta = [];
foreach ($urls as $url) {
try {
$meta[$url] = get_meta_tags($url);
} catch (Exception $e) {
//
}
}
return $meta;
}
不要忘记初始化 $meta
数组,否则当您尝试 return 未定义的变量时可能会出错。
正如我在评论中建议的那样,您可以在循环内进行错误检查,并跳过任何错误的错误。这允许您摆脱 $blockUrl
数组,除非您在其他地方需要它。
public function doSomething($urls) {
$meta = array();
foreach ($urls as $key => $url) {
try {
$result = get_meta_tags($url);
$meta[$url] = $result;
} catch (Exception $e) {
continue;
}
}
return $meta;
}
Try catch
是用来处理异常的,但也可以这样用吗?
private $blockUrl = [];
public function doSomething($urls) {
try {
foreach ($urls as $key => $url) {
if (in_array($url, $this->blockUrl)) continue;
$meta[$url] = get_meta_tags($url);
unset($urls[$key]);
}
} catch (Exception $e) {
$this->blockUrl[] = $url;
return $this->doSomething($urls);
}
return $meta;
}
所以基本上它所做的是获取传递给方法的 url 的元标记。然后如果 get_meta_tags
发生异常,将抛出异常,并且将导致异常的 url 放入数组 $this->blockUrl
中。然后它会再次调用相同的方法,但这次只会再次验证剩余的 urls。
这是执行此逻辑的正确且有效的方法吗?
我在这里使用 try catch
是因为有时我在 get_meta_tags
上遇到 curl
错误,我只想跳过那些有这些错误的 url 并继续顺其自然。
将 try/catch
放入循环中:
public function doSomething($urls) {
$meta = [];
foreach ($urls as $url) {
try {
$meta[$url] = get_meta_tags($url);
} catch (Exception $e) {
//
}
}
return $meta;
}
不要忘记初始化 $meta
数组,否则当您尝试 return 未定义的变量时可能会出错。
正如我在评论中建议的那样,您可以在循环内进行错误检查,并跳过任何错误的错误。这允许您摆脱 $blockUrl
数组,除非您在其他地方需要它。
public function doSomething($urls) {
$meta = array();
foreach ($urls as $key => $url) {
try {
$result = get_meta_tags($url);
$meta[$url] = $result;
} catch (Exception $e) {
continue;
}
}
return $meta;
}