我正在编写一个模块,并希望为它可以引发的exception(例如从所有foo模块的特定exception的FooError抽象类inheritance)有一个统一的exception层次结构。 这允许模块的用户捕获这些特定的exception,并在需要时明确处理它们。 但是由于某些其他的例外情况,模块中引发的许多例外情况都会引发。 例如由于文件上的OSError而导致某些任务失败。 我需要的是“包装”捕获到的exception,使其具有不同的types和消息 ,以便通过捕获exception来获取信息。 但我不想丢失现有的types,消息和堆栈跟踪; 对于试图debugging问题的人来说,这是所有有用的信息。 顶级的exception处理程序是不好的,因为我试图装饰exception,然后再传播到堆栈的顶层,而顶层的处理程序太迟了。 这部分通过从现有types(例如class FooPermissionError(OSError, FooError) )中派生我的模块foo的特定exceptiontypes来解决,但是这并不能使以新types包装现有exception实例变得更容易,修改消息。 Python的PEP 3134 “exception链接和embedded式跟踪”讨论了Python 3.0中为“链接”exception对象所接受的更改,以指示在处理现有exception期间引发了新的exception。 我想要做的是相关的:我需要它在早期的Python版本中工作,我不需要链接,而只是为了多态。 什么是正确的方法来做到这一点?
我想将错误的名称和回溯细节保存到一个variables中。 这是我的尝试。 import sys try: try: print x except Exception, ex: raise NameError except Exception, er: print "0", sys.exc_info()[0] print "1", sys.exc_info()[1] print "2", sys.exc_info()[2] 输出: 0 <type 'exceptions.NameError'> 1 2 <traceback object at 0xbd5fc8> 期望的输出: 0 NameError 1 2 Traceback (most recent call last): File "exception.py", line 6, in <module> raise NameError PS我知道这可以很容易地使用回溯模块,但我想知道在这里sys.exc_info()[2]对象的用法。
到目前为止,我只是在Application.Run的Program.cs入口点的Application.Run周围放置了一个try / catch块。 这在debugging模式下捕获了所有的exception,但是当我在没有debugging模式的情况下运行程序时,exception不再被处理。 我得到未处理的exception框。 我不想要这样的事情发生。 我希望在非debugging模式下运行时捕获所有exception。 该程序有多个线程,最好所有的exception都被同一个处理程序捕获。 我想在数据库中loggingexception。 有没有人有任何build议如何做到这一点?
Google的C ++风格指南说:“我们不使用例外”。 风格不提及STL关于exception的使用。 由于STL分配器可能会失败,他们如何处理容器抛出的exception? 如果他们使用STL,调用者如何通知分配失败? 像push_back()或map operator[] STL方法不会返回任何状态码。 如果他们不使用STL,他们使用什么容器实现?
我想重新抛出在我的try块中发生的sql服务器中的相同的exception。 我能够抛出相同的消息,但我想抛出同样的错误。 BEGIN TRANSACTION BEGIN TRY INSERT INTO Tags.tblDomain (DomainName, SubDomainId, DomainCode, Description) VALUES(@DomainName, @SubDomainId, @DomainCode, @Description) COMMIT TRANSACTION END TRY BEGIN CATCH declare @severity int; declare @state int; select @severity=error_severity(), @state=error_state(); RAISERROR(@@Error,@ErrorSeverity,@state); ROLLBACK TRANSACTION END CATCH RAISERROR(@@Error, @ErrorSeverity, @state); 这行会显示错误,但我想要的function。 这引起错误号码50000错误,但我想erron号码被抛出,我通过@@error , 我想在前端捕获这个错误 即 catch (SqlException ex) { if ex.number==2627 MessageBox.show("Duplicate value cannot be […]
这是我经常做的一个例子,当我想添加一些信息到exception: std::stringstream errMsg; errMsg << "Could not load config file '" << configfile << "'"; throw std::exception(errMsg.str().c_str()); 有没有更好的方法来做到这一点?
当我运行我的项目时,我得到了这个错误的许多输出: 2009年9月9日上午8时22分23秒org.apache.catalina.core.StandardWrapperValve invoke SEVERE:servlet Jersey的Servlet.service()抛出exception java.lang.NoClassDefFoundError:无法初始化SpringFactory类 在com.point2.prospect.persistence.hibernate.HibernateTransactionInterceptor.doFilter(HibernateTrans actionInterceptor.java:17) 在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在com.point2.prospect.restapi.ServerErrorInterceptor.doFilter(ServerErrorInterceptor.java:27) 在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) 在org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) 在org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:583) 在org.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:447) 在java.lang.Thread.run(Thread.java:619) 我注意到,这个问题有一个在networking上被问到的模式,但没有真正的答案。 什么是这种错误的一般原因?
在使用常规ASP.NET Web API多年后,我开始使用ASP.NET Core作为新的REST API项目。 我没有看到在ASP.NET Core Web API中处理exception的好方法。 我试图实现exception处理filter/属性: public class ErrorHandlingFilter : ExceptionFilterAttribute { public override void OnException(ExceptionContext context) { HandleExceptionAsync(context); context.ExceptionHandled = true; } private static void HandleExceptionAsync(ExceptionContext context) { var exception = context.Exception; if (exception is MyNotFoundException) SetExceptionResult(context, exception, HttpStatusCode.NotFound); else if (exception is MyUnauthorizedException) SetExceptionResult(context, exception, HttpStatusCode.Unauthorized); else if (exception […]
这与今天的同事讨论。 Java的IllegalStateException的Javadocs声明: 表示某个方法在非法或不适当的时间被调用。 换句话说,对于请求的操作,Java环境或Java应用程序不处于适当的状态。 有效的Java说(项目60,第248页): 另一个常见的重用exception是IllegalStateException。 如果由于接收对象的状态而导致调用是非法的,则这通常是抛出的exception。 例如,如果调用者在正确初始化之前尝试使用某个对象,这将是一个例外。 这里似乎有点不一致。 javadocs的第二个句子使得听起来像exception可以描述关于Java执行状态的一个非常广泛的条件,但Effective Java中的描述听起来像是用于特定于与其对象的状态状态相关的条件方法已被调用。 我在JDK中看到的使用方法(例如collections, Matcher )和Guava,似乎都属于Effective Java谈论的范畴(“这个对象处于无法调用这个方法的状态)”。 这也与IllegalStateException的兄弟IllegalArgumentException一致。 JDK中是否存在与“Java环境”或“Java应用程序”相关的合法IllegalStateExceptionexception? 或者是否有任何最佳实践指南提倡将其用于更广泛的执行状态? 如果不是的话,为什么哈维是这样expression的? ;)
我不太熟悉Java的exception包和.NET的exception包。 我在这种情况下,如果在C#编程,我会抛出一个System.InvalidOperationException 。 在创build我自己的java.lang.RuntimeException子类之前,我需要知道是否有类似的exceptiontypes,我应该抛出Java。 确切的情况是: 我的类是一个值对象,它提供了一个int intValue()方法,返回一个int。 但是,在某些情况下,当前值不能作为int提供,所以这个类还提供了一个boolean isInteger()来允许API用户知道intValue()何时可以被安全地调用。 如果调用者在isInteger()为false时调用intValue() ,则应抛出exception。 问题是:什么types的exception? 我知道这个问题可能没有一个正确的答案,但考虑到我没有很多deviseJava API的经验,我想从其他Java开发人员那里知道他们会在这种情况下抛出什么。 谢谢