当前位置: 首页 > 面试题库 >

何时使用Try Catch块

柴飞扬
2023-03-14
问题内容

好的,这可能是一个非常愚蠢的问题,但是我发现关于此的PHP文档以及一些Internet搜索并没有使我对此有所任何了解。

什么时候应该使用try-catch块来改进我的应用程序?

我读过有人说我们应该仅使用try-
catch块来防止致命错误。我读过别人的话说,我们应该只在意外错误上使用它(等什么?意外?如果它们是意外错误,如何使用try-
catch防止它们出现?我应该将所有应用程序代码放在try块中吗?)。其他人只是说try-
catch块应该在任何地方使用,因为它们也可以扩展(扩展Exception类)。最后有人说PHP try-
catch块完全没有用,因为它们实现起来很糟糕。(在此我发现了一个关于性能的很好的SO问题)。

在我看来,这个话题非常奇怪和困惑。有人可以照亮我吗?


问题答案:

在我看来,这个话题非常奇怪和困惑。有人可以照亮我吗?

绝对是 我不是PHP用户,但是在ActionScript,Java和JavaScript中使用try /
catch后,可能会有所了解。但是请记住,不同的语言和平台会鼓励尝试/捕获的不同用法。那个…

我唯一建议使用try / catch的情况是,如果您使用的是

  1. 会抛出错误/异常
  2. 没有提供任何工具来检测您是否会做一些愚蠢的事情来导致该错误/异常。例如:在ActionScript中,关闭未打开的加载器会导致错误,但该加载器没有isOpen属性要检查,因此您不得不将其包装在try / catch中,以使本来完全没有意义的错误静音。
  3. 错误/异常 确实 毫无意义。

让我们以列出的示例为例,看看它们如何与该列表相符。

我读过有人说我们应该仅使用try-catch块来防止致命错误。

对于AS的loader.close()函数,这是一个很好的建议。这是一个致命的错误,而所有其他错误都是由于这种错误而造成的。另一方面,AS中几乎所有的错误都会使您的应用程序停止。然后将它们全部包装在try
/
catch中吗?绝对不!由于某种原因,“致命错误”是致命的。这意味着发生了非常严重的错误,并且html" target="_blank">应用程序在潜在的“未定义”状态下继续运行非常困难。最好知道发生了一个错误然后再解决它,而不是随它去。

我读过别人的话说,我们应该只在意外错误时使用它

更糟的是。这些通常是您不想消除的错误,因为使它们静音意味着您永远不会找到它们。也许您没有吞下它们,但是…可能正在记录它们。但是,为什么您会尝试/捕获/记录/继续,好像什么都没发生一样,从而使程序在潜在的危险和意外情况下运行?只需让错误让您大吃一惊,然后修复它即可。除了尝试调试别人编写的程序中的错误之外,没有其他比这更令人沮丧的了,因为他们将所有内容包装在try
/ catch块中,然后被忽略记录。

其他人只是说try-catch块应该在任何地方使用,因为它们也可以扩展(扩展Exception类)。

如果您是一个正在抛出的人,并且您正试图提醒自己程序中的异常情况,那么这可能有好处。但是为什么要尝试/捕获自己的抛出错误呢?让它踢您的牙齿,然后修复它,这样您就不再需要抛出错误了。

最后有人说PHP try-catch块完全没有用,因为它们实现起来很糟糕。(对此,我发现了一个关于性能的很好的SO问题)。

可能是吧。我不能回答这个。

所以…这可能是一个宗教问题,我敢肯定有人会不同意我的观点,但是从我的角度出发,这些是我多年来尝试/捕获的经验教训。



 类似资料:
  • 我想在上面运行代码。但在下面显示消息不起作用。 预测错误(拟合,h=52):未找到对象“拟合” 我的意图是...如果第一个函数有错误(

  • 我想写一些代码来处理从web下载时的错误。 这两条语句运行成功。下面,我创建了一个不存在的网址: 不存在。如何编写循环(函数)以便: 当URL错误时,输出为:“web URL错误,无法获取” 当URL错误时,代码不会停止,而是继续下载,直到URL列表结束

  • 我试图编写一个函数来处理批处理作业的执行,记录作业结果的错误和统计信息。 是否有方法从finally块引用expr块的返回值?

  • 问题内容: 我一直在nodejs中编程,研究了如何同时使用socket.io和对节点服务器的ajax调用。socket.io是否设计为替代ajax?我很好奇,在哪种情况下使用socket.io更好,而哪种ajax更好。感谢您的输入。 问题答案: 好吧,Web套接字(通过socket.io)提供的主要内容之一就是ajax缺乏的是服务器推送。因此,对于ajax,如果您想了解服务器上的新事件(例如,另一

  • 我和我的团队一直在使用Spring boot开发一系列微服务。由于服务经历了JUnit和Spring Boot升级(我们现在使用的是Spring Boot 2和JUnit 5),不同开发人员实现的不同JUnit现在使用不同的模式: @扩展为 今天,它们之间的区别是什么?我们真的需要它们来进行单元测试还是嵌入到一些新的Spring Boot注释中?

  • 问题内容: 我得到了asyncio在Python 3.5 中使用的流程,但是我还没有看到关于我应该使用什么东西,我不应该使用的await东西或者它在哪里容易出现的描述。我是否仅需要根据“这是IO操作并应进行await编辑” 来做出最好的判断? 问题答案: 默认情况下,所有代码都是同步的。你可以使用使其异步定义函数,async def并使用来“调用”这些函数await。一个更正确的问题是“什么时候应

  • 问题内容: 我感觉好像总是被教导要使用s,并且我经常看到它们与s 混合使用,以在应该在不同页面上执行相同操作的几段代码中完成相同类型的查询。开始: 那就是我正在从事的工作: 我看到很多像: 似乎LEFT也可能是INNER,有没有抓住的机会? 问题答案: 有收获吗?是的-左联接是外联接的一种形式,而内联接是内联接的一种形式。 这是显示差异的示例。我们将从基本数据开始: 在这里,我们将看到内部联接和左

  • 问题内容: 定制JPA映射器类具有以下方法: 如果我正确理解clear(),它将从上下文中删除所有持久性实体。-资源 但是,我也在这里阅读, 关于何时调用clear()的明确准则是什么? 问题答案: 文章对此进行了解释。清除实体管理器将清空其关联的缓存,从而迫使新的数据库查询在事务中稍后执行。使用事务绑定的实体管理器时,几乎几乎不需要清除实体管理器。我看到有两个原因需要清除: 在进行批处理时,为了