故意不抓异常

所以我有一点点代码</ p>

 公共函数 getPrices($ debtorId)
{
$ priceListId = $ this-&gt; getPriceListId($ debtorId);
if(!$ priceListId){
throw new \ Exception('找不到此客户的列表');

}

//在这里做一些需要$ priceListId

返回$ price的操作;

</ code> </ pre>

到目前为止,我会 做了类似</ p>

  if(!$ priceListId)exit('找不到该客户的列表'); 
</ code> </ pre>

不同之处在于,如果我想</ em>,我可以捕获异常,而使用exit语句则无法实现。</ p>

但是,在这种情况下 我确实希望我的程序退出。 但我的IDE警告我,我没有捕捉异常。 所以,我现在应该真的这样做:</ p>

 尝试{
$ prices = $ priceHandler-&gt; getPrices($ debtorId);
} catch(异常$ e) {
exit($ e-&gt; getMessage());
}
</ code> </ pre>

后者在我看来是不必要的,实际上降低了代码质量。 所以:故意不捕捉一些例外是否可以接受?</ strong>或者我是否应该完全摆脱异常而只使用普通的旧退出</ code>?</ p>
\ n

我试着搜索这个问题,但是我只得到了那些遇到技术问题而且try / catch无法正常工作的结果。</ p>
</ div>

展开原文

原文

So I have this little bit of code

public function getPrices($debtorId)
{
    $priceListId = $this->getPriceListId($debtorId);
    if(!$priceListId){
        throw new \Exception('No list found for this customer');
    }

    // doing some operations here that require $priceListId

    return $prices;

Up until now, I would have done something like

if(!$priceListId) exit('No list found for this customer');

The difference being, that I could catch the Exception if I want to, while that's not possible with the exit statement.

However, in this case I do want my program to exit. But my IDE warns me that I'm not catching Exceptions. So, should I really do this now:

try {
    $prices = $priceHandler->getPrices($debtorId);
} catch(Exception $e) {
    exit($e->getMessage());
}

The latter appears to me as unecessary and actually decreasing code quality. So: Is it acceptable to deliberately NOT catch some exceptions? Or should I even get rid of the exception alltogether and just use plain old exit?

I tried searching for this question, but I only got results about people who had technical problems with try/catch not working.

dongsheng6056
dongsheng6056 我知道这不是特定于PHP的,但我相信你会更好地了解你的问题的答案。阅读有关EAFP和LBYLpython编码样式的信息。
一年多之前 回复

1个回答



不,如果你不愿意,你不应该在那里捕获你的例外。 </ p>

即使你想要捕捉它,它也很容易在其他地方,所以你绝对不必将它包装在try-catch中。</ p>

相反,您应该告诉IDE该方法应该抛出异常:</ p>

  / ** 

  • @throws \ Exception
  • / public function getPrices($ debtorId) </ code> </ pre> </ div>

展开原文

原文

No, you should not catch your exception there if you do not want to.

Even if you want to catch it, it could very easily be somewhere else, so you definitely do not have to wrap this in a try-catch.

Instead, you should tell your IDE that this method is supposed to throw an exception:

/**
 * @throws \Exception
 */
public function getPrices($debtorId)

duanqian3464
duanqian3464 没错,它会进一步推动警告并将其移除,你必须这样做。 如果您在调用方法的任何地方执行此操作,它将完全删除警告,即使您最终从未捕获异常。
一年多之前 回复
dsa80833
dsa80833 你是对的,我调用getPrices()的更高级代码仍然带有警告。 然后它再次有意义,因为更高级别的代码最终将抛出异常。
一年多之前 回复
dongqiabei7682
dongqiabei7682 是的,但这只会将警告进一步推向呼叫链。 OP正在谈论不在任何地方捕获异常。 我并不是真的不同意你的回答,我只是不确定它是否完全消除了你故意永远不会捕获抛出异常的情况的警告。
一年多之前 回复
douweng3383
douweng3383 标签也是。 这可以方便地向您显示该方法可以返回/抛出的内容,即使它被抛出到其他地方也是如此。 当您在方法之前执行/ **后输入​​时,PHPStorm将自动生成所有内容。
一年多之前 回复
douxun4173
douxun4173 标记如果你在那条线上并按alt-enter(在mac上)。
一年多之前 回复
dqq48152418
dqq48152418 我的经验(至少使用PHPStorm)是这可能会消除函数内的通知,但是当你使用函数时,仍然会警告你没有捕获抛出的异常。 OP中显示的try / catch块将需要摆脱该警告。
一年多之前 回复
doupo1908
doupo1908 啊,看起来就像我需要的(两位)信息。 我会等一下,看看有人在接受答案之前还有更多要说的话
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问