Questions tagged «exception-handling»

异常是一种异常情况,需要偏离程序的正常流程。通常,异常不应导致完全失败,而应由异常处理程序来处理。异常处理是许多编程语言中的内置构造。通常,通过展开堆栈来处理异常,从而回滚到异常范围之外的已定义状态,然后调用处理程序块或例程。

10
有没有一种pythonic的方法可以尝试最大次数的尝试?[重复]
这个问题已经在这里有了答案: Python:尝试三次函数,直到全部失败 (3个答案) 4个月前关闭。 我有一个python脚本正在查询共享Linux主机上的MySQL服务器。出于某种原因,对MySQL的查询通常会返回“服务器已消失”错误: _mysql_exceptions.OperationalError: (2006, 'MySQL server has gone away') 如果此后立即再次尝试查询,通常会成功。因此,我想知道python中是否有一种明智的方法来尝试执行查询,如果失败,则可以重试固定次数的尝试。可能我想让它尝试5次再完全放弃。 这是我的代码类型: conn = MySQLdb.connect(host, user, password, database) cursor = conn.cursor() try: cursor.execute(query) rows = cursor.fetchall() for row in rows: # do something with the data except MySQLdb.Error, e: print "MySQL Error %d: %s" % (e.args[0], e.args[1]) 显然,我可以通过在except子句中进行另一次尝试来做到这一点,但这非常丑陋,而且我觉得必须有一种不错的方法来实现这一目标。

7
什么时候在Java方法声明中使用抛出?
因此,我认为我对Java中的异常处理有很好的基本了解,但是最近我正在阅读一些使我有些困惑和怀疑的代码。我要在这里解决的主要疑问是,一个人何时应该使用以下方法抛出Java方法声明: public void method() throws SomeException { // method body here } 通过阅读一些类似的文章,我收集到的引发信息被用作一种声明,表明可以在方法执行期间引发SomeException。 我的困惑来自一些看起来像这样的代码: public void method() throws IOException { try { BufferedReader br = new BufferedReader(new FileReader("file.txt")); } catch(IOException e) { System.out.println(e.getMessage()); } } 在此示例中,您是否有任何理由要使用抛出?看来,如果您只是对IOException之类的东西进行基本的异常处理,则只需要try / catch块即可。

5
当我“扔”东西时,它在哪里存储在内存中?
我知道当thrown为n时,堆栈将被“解卷”到被捕获的位置,并且在每个函数上下文中运行堆栈上的类实例的析构函数(这就是为什么您不应该从析构函数中引发异常) -您可能最终会抛出第二个)。但是我想知道发生这种情况时,我抛出的对象存储在内存中的什么位置? 是否依赖于实现?如果是这样,大多数流行的编译器是否使用特定的方法?

7
设置多个@ControllerAdvice @ExceptionHandlers的优先级
我有多个用注释的类@ControllerAdvice,每个类都有一个@ExceptionHandler方法。 一个处理程序Exception的意图是,如果找不到更多特定的处理程序,则应使用它。 遗憾的是,Spring MVC似乎总是使用最通用的情况(Exception),而不是使用更具体的情况(IOException例如)。 这是人们期望Spring MVC表现的方式吗?我正在尝试模仿Jersey的模式,该模式会评估每个ExceptionMapper(等效组件)以确定它处理的声明类型与引发的异常之间的距离,并且始终使用最接近的祖先。

7
什么时候以及如何使用异常处理?
我正在阅读有关异常处理的信息。我获得了有关什么是异常处理的一些信息,但是我有几个问题: 什么时候抛出异常? 除了抛出异常,我们还可以使用返回值来指示错误吗? 如果我通过try-catch块保护所有功能,会不会降低性能? 什么时候使用异常处理? 我看到了一个项目,该项目中的每个函数都包含一个try-catch块(即,整个函数内的代码被try-catch块包围)。这是一个好习惯吗? try-catch和__try __except有什么区别?


28
为什么Java人们经常默默地消费异常?
我以前从未进行过任何认真的Java编码,但是我根据现有技能(Delphi和C#)学习了语法,库和概念。我很难理解的一件事是,我看到如此多的代码在printStackTrace像这样的情况下静默地消耗异常: public void process() { try { System.out.println("test"); } catch(Exception e) { e.printStackTrace(); } } 在我遇到的几乎所有Java文章和项目中都有类似的代码。根据我的知识,这是非常糟糕的。几乎应该总是将异常转发给外部上下文,如下所示: public void process() { try { System.out.println("test"); } catch(Exception e) { e.printStackTrace(); throw new AssertionError(e); } } 大多数情况下,异常应该最终在属于底层框架(例如Java Swing)的最外层循环中进行处理。为什么在Java世界中看起来像这样的代码规范?我很困惑 根据我的背景,我希望完全删除printStackTrace 。我只是将其作为未处理的aka RuntimeException(或者甚至更好AssertionError)扔掉,然后在最合适的位置捕获并记录它:框架最外层的循环。 public void process() { try { System.out.println("test"); } catch(Exception e) { throw …

5
报告来自Google Analytics(分析)analytics.js异常跟踪的异常
Google Universal Analytics命中类型异常 ga('send', 'exception', { 'exDescription': 'DatabaseError' }); 我原本希望能够转到Google Analytics(分析)控制台,并在与“事件”相同的级别上找到出库报告,但无处可寻。 Android和iOS API会说,Crash and exception data is available primarily in the Crash and Exceptions report但找不到该名称的任何报告。


7
Elmah不与asp.net站点一起使用
我试图在我的asp.net网站上使用elmah,但是每当我尝试访问http:// localhost:port / elmah.axd时,我都找不到资源异常。我的web.config如下。 <?xml version="1.0"?> <configuration> <configSections> <sectionGroup name="elmah"> <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah"/> <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" /> <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" /> <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah"/> </sectionGroup> </configSections> <elmah> <security allowRemoteAccess="0" /> <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="elmah-sql" /> <errorMail from="my@account" to="myself" subject="ERROR From Elmah:" async="true" …

5
如何确定异常是否属于特定类型
我有一段try catch代码: try { ... } catch(Exception ex) { ModelState.AddModelError( "duplicateInvoiceNumberOrganisation", "The combination of organisation and invoice number must be unique"); } 对于这段代码,我试图将记录插入数据库:dba对其进行了设置,以便数据库检查重复项,如果存在重复项,则返回错误。如您所见,当前,无论发生什么错误,我都将相同的错误添加到模型中。我希望它已更改,因此,如果该错误是由dba设置的重复错误引起的,则仅将其添加到模型中。 以下是我要捕获的错误。请注意,这是内部异常。谁能告诉我如何特别抓到这个?

9
是否可以在不添加throws声明的情况下引发异常?
我有以下情况。 我有一个从另一个基类继承并覆盖一个方法的Java类。基本方法不会引发异常,因此没有throws ...声明。 现在我自己的方法应该可以引发异常,但是我要么有选择 吞下异常 添加抛出声明 两者都不令人满意,因为第一个会静默忽略异常(好了,我可以执行一些日志记录),第二个会由于方法标头不同而生成编译器错误。 public class ChildClass extends BaseClass { @Override public void SomeMethod() { throw new Exception("Something went wrong"); } }

4
Haskell中的异常处理
我需要帮助以了解三个Haskell函数的用法 试试(Control.Exception.try :: Exception e => IO a -> IO (Either e a)) 赶上(Control.Exception.catch :: Exception e => IO a -> (e -> IO a) -> IO a) 处理(Control.Exception.handle :: Exception e => (e -> IO a) -> IO a -> IO a) 我需要知道几件事: 什么时候使用哪个功能? 如何通过一些简单的示例使用此功能? 捕获和处理之间的区别在哪里?它们具有几乎相同的签名,只是顺序不同。 我将尝试写下我的尝试,并希望您能为我提供帮助: 尝试 我有一个像这样的例子: …

8
如何有效地使用PHP中的try…catch块
我在PHP代码中一直使用try..catch块,但不确定是否正确使用了它们。 例如,我的一些代码如下所示: try { $tableAresults = $dbHandler->doSomethingWithTableA(); $tableBresults = $dbHandler->doSomethingElseWithTableB(); } catch (Exception $e) { return $e; } 因此,我将多个数据库操作分组在同一try / catch块中,因为如果任何事务中发生任何异常,我将能够处理它。 我这样做是因为我认为它比: try { $tableAresults = $dbHandler->doSomethingWithTableA(); } catch (Exception $e) { return $e; } try { $tableBresults = $dbHandler->doSomethingWithTableB(); } catch (Exception $e) { return $e; } 虽然,我不确定我在做什么是好的习惯还是只是捕获异常的一种懒惰方式。 我的假设是,仅当异常需要特殊处理时,它才应具有自己的try …

3
Android异常处理最佳实践?
如果我的应用程序崩溃了,它会挂起几秒钟,然后Android告诉我该应用程序崩溃了,需要关闭。所以我当时想用通用的方式捕获应用程序中的所有异常: try { // ... } catch(Exception e) { // ... } 并做一个新的Activity解释,说明应用程序立即崩溃(并且还使用户有机会发送包含错误详细信息的邮件),而不是由于Android而造成了延迟。是否有更好的方法来实现这一目标? 更新:我使用的是启用了ART的Nexus 5,但我没有注意到我以前遇到的崩溃(我最初所说的“挂起”)是延迟的。我认为既然现在所有内容都是本机代码,那么崩溃会立即发生,并且会获取所有崩溃信息。也许Nexus 5很快就可以了:)不管怎么说,这可能不会在将来的Android版本中引起担心(假设ART将成为Android L中的默认运行时)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.