Questions tagged «exception-handling»

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

5
控制台应用程序中的.NET全局异常处理程序
问题:我想在控制台应用程序中为未处理的异常定义全局异常处理程序。在asp.net中,可以在global.asax中定义一个,而在Windows应用程序/服务中,可以如下定义 AppDomain currentDomain = AppDomain.CurrentDomain; currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyExceptionHandler); 但是,如何为控制台应用程序定义全局异常处理程序? currentDomain似乎不起作用(.NET 2.0)? 编辑: 啊,愚蠢的错误。 在VB.NET中,需要在currentDomain前面添加“ AddHandler”关键字,否则在IntelliSense中不会看到UnhandledException事件。 这是因为VB.NET和C#编译器对事件处理的处理不同。

1
Python“提高”用法
raise和raise fromPython 和有什么不一样? try: raise ValueError except Exception as e: raise IndexError 产生 Traceback (most recent call last): File "tmp.py", line 2, in <module> raise ValueError ValueError During handling of the above exception, another exception occurred: Traceback (most recent call last): File "tmp.py", line 4, in <module> raise IndexError IndexError …



20
为什么空捕获会阻止一个坏主意?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引文回答。 4年前关闭。 改善这个问题 我刚刚在try-catch上看到了一个问题,哪些人(包括Jon Skeet)说空的捕获块是一个真正的坏主意?为什么这个?难道没有一个空的陷阱不是错误的设计决定吗? 我的意思是,例如,有时您想从某个地方(Web服务,数据库)获得一些其他信息,而您实际上并不在乎是否会获得此信息。因此,您尝试获取它,并且如果发生任何事情,那没关系,我只需添加一个“ catch(忽略了异常){}”,仅此而已

22
写入事件日志时出现System.Security.SecurityException
我正在尝试将ASP.NET应用程序从Server 2003(和IIS6)移植到Server 2008(IIS7)。 当我尝试在浏览器上访问页面时,我得到以下信息: “ /”应用程序中的服务器错误。 安全例外 说明:应用程序尝试执行安全策略不允许的操作。要授予此应用程序所需的权限,请与系统管理员联系或在配置文件中更改应用程序的信任级别。 异常详细信息:System.Security.SecurityException:找不到源,但是无法搜索某些或所有事件日志。无法访问的日志:安全性 源错误: 当前Web请求的执行期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来标识有关异常的来源和位置的信息。 堆栈跟踪: [SecurityException:找不到源,但是无法搜索某些或所有事件日志。无法访问的日志:安全性。] System.Diagnostics.EventLog.FindSourceRegistration(字符串源,字符串machineName,布尔型readOnly)+562 System.Diagnostics.EventLog.SourceExists(字符串源,字符串machineName)+251 [片段] 这些是我为尝试解决该问题所做的事情: 授予“所有人”对密钥的完全访问权限HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Security。这工作了。但是自然地,我无法在生产中做到这一点。因此,在运行应用程序几分钟后,我删除了“所有人”权限,并且错误再次出现。 我在安装期间使用提升的权限在“应用程序”日志和“安全性”日志中创建了源(并通过regedit验证了它的存在),但错误仍然存​​在。 我在web.config文件中(并使用appcmd.exe)为该应用程序赋予了完全信任级别,但无济于事。 有没有人知道在这里可以做什么? PS:这是此问题的后续措施。我遵循了给出的答案,但无济于事(请参阅上面的2)。


10
在Python中记录未捕获的异常
您如何导致未捕获的异常通过logging模块而不是通过模块输出stderr? 我意识到最好的方法是: try: raise Exception, 'Throwing a boring exception' except Exception, e: logging.exception(e) 但是我的情况是,如果在没有捕获到异常的情况下自动调用它,那将非常好logging.exception(...)。

9
抛出HttpResponseException或返回Request.CreateErrorResponse吗?
在阅读了ASP.NET Web API中的异常处理文章之后,我对何时引发异常与返回错误响应感到困惑。我还想知道当您的方法返回特定于域的模型而不是HttpResponseMessage... 时是否可以修改响应... 因此,回顾一下我的问题,后面是一些带有案例编号的代码: 问题 有关案例1的问题 我是否应该始终使用HttpResponseMessage而不是具体的域模型,以便可以自定义消息? 如果要返回具体域模型,可以自定义消息吗? 有关案例#2、3、4的问题 我应该抛出异常还是返回错误响应?如果答案是“视情况而定”,那么您能否举例说明何时使用另一种方法。 HttpResponseExceptionvs与thing有Request.CreateErrorResponse什么区别?输出到客户端似乎相同... 我是否应该总是使用HttpError“包装”错误中的响应消息(是否抛出异常或返回错误响应)? 案例样本 // CASE #1 public Customer Get(string id) { var customer = _customerService.GetById(id); if (customer == null) { var notFoundResponse = new HttpResponseMessage(HttpStatusCode.NotFound); throw new HttpResponseException(notFoundResponse); } //var response = Request.CreateResponse(HttpStatusCode.OK, customer); //response.Content.Headers.Expires = new DateTimeOffset(DateTime.Now.AddSeconds(300)); return …

3
.NET中有什么ApplicationException?
要抛出异常,我通常使用内置的异常类,例如ArgumentNullException和NotSupportedException。但是,有时我需要使用自定义异常,在这种情况下,我会写: class SlippedOnABananaException : Exception { } class ChokedOnAnAppleException : Exception { } 等等。然后我将它们扔到我的代码中。但是今天我遇到了ApplicationException全班学生-我应该改用它吗?这是为了什么? 拥有许多名称完全不同的有效相同的Exception类似乎没有效率(我通常不需要任何单独的功能)。但是我不喜欢捕获泛型ApplicationException并且必须使用额外的代码来确定错误是什么的想法。 ApplicationException我的代码应该放在哪里?

10
Spring Boot REST服务异常处理
我正在尝试建立一个大型的REST服务服务器。我们正在使用Spring Boot 1.2.1,Spring 4.1.5和Java8。我们的控制器正在实现@RestController和标准的@RequestMapping注释。 我的问题是Spring Boot为控制器异常设置了默认重定向到/error。从文档: Spring Boot默认提供一个/ error映射,以一种明智的方式处理所有错误,并且在servlet容器中被注册为“全局”错误页面。 对使用Node.js编写REST应用程序已有多年的经验,对我而言,这绝非明智之举。服务端点生成的任何异常都应在响应中返回。我不明白为什么您要发送重定向到最有可能是Angular或JQuery SPA使用者的重定向程序,该使用者仅在寻找答案并且不能或不会对重定向采取任何措施。 我想做的是设置一个可以接受任何异常的全局错误处理程序-有目的地从请求映射方法抛出,或者由Spring自动生成(如果未为请求路径签名找到处理程序方法,则为404),然后返回标准格式的错误响应(400、500、503、404)到客户端,而无需任何MVC重定向。具体来说,我们将处理错误,使用UUID将其记录到NoSQL,然后将正确的HTTP错误代码与JSON主体中的日志条目的UUID返回给客户端。 文档对如何执行此操作一直含糊不清。在我看来,您必须创建自己的ErrorController实现或以某种方式使用ControllerAdvice,但是我所看到的所有示例仍然包括将响应转发到某种错误映射,这没有帮助。其他示例建议您必须列出要处理的每个Exception类型,而不是仅列出“ Throwable”并获取所有内容。 谁能告诉我我错过了什么,或者在没有暗示Node.js更容易处理的前提下为我指出正确的方向?

15
Java 8:Lambda-Streams,按方法进行过滤(异常)
我在尝试Java 8的Lambda表达式时遇到问题。通常它可以正常工作,但是现在我有抛出IOException的方法。最好查看以下代码: class Bank{ .... public Set<String> getActiveAccountNumbers() throws IOException { Stream<Account> s = accounts.values().stream(); s = s.filter(a -> a.isActive()); Stream<String> ss = s.map(a -> a.getNumber()); return ss.collect(Collectors.toSet()); } .... } interface Account{ .... boolean isActive() throws IOException; String getNumber() throws IOException; .... } 问题是,它无法编译,因为我必须捕获isActive-和getNumber-Methods的可能异常。但是,即使我显式使用了如下所示的try-catch-Block,它仍然无法编译,因为我没有捕获到Exception。因此,或者JDK中存在错误,或者我不知道如何捕获这些异常。 class Bank{ .... //Doesn't compile …

2
如何在Javascript中抛出异常,但保留堆栈?
在Javascript中,假设我想在发生异常时执行一些清除操作,但是让异常继续在堆栈中传播,例如: try { enterAwesomeMode(); doRiskyStuff(); // might throw an exception } catch (e) { leaveAwesomeMode(); throw e; } doMoreStuff(); leaveAwesomeMode(); 此代码的问题在于,捕获并重新抛出异常会导致丢失到该点的堆栈跟踪信息,因此,如果随后再次捕获到异常,则该堆栈跟踪在堆栈的较高位置,则堆栈跟踪只会下降到-扔。这很烂,因为这意味着它不包含实际引发异常的函数。 事实证明,try..finally在至少Chrome中具有相同的行为(也就是说,精确地不是问题是重新抛出,而是所有异常处理程序块的存在。) 有谁知道一种在Java中重新抛出异常但保留与之关联的堆栈跟踪的方法吗?失败了,如何建议其他方法来添加异常安全的清理处理程序,同时在发生异常时捕获完整的堆栈跟踪信息? 感谢您的任何指点:)


5
用其他类型和消息重新引发异常,保留现有信息
我正在编写一个模块,并希望它可以引发的异常具有统一的异常层次结构(例如,从FooError抽象类继承所有foo模块的特定异常)。这使模块的用户可以捕获那些特定的异常,并在需要时进行区别处理。但是从模块引发的许多异常是由于其他一些异常而引发的;例如,由于文件上的OSError而导致某些任务失败。 我需要的是“包装”捕获到的异常,使其具有不同的类型和消息,以便通过捕获异常的方式在传播层次结构中进一步获取信息。但是我不想丢失现有的类型,消息和堆栈跟踪;这对于尝试调试问题的人来说都是有用的信息。顶级异常处理程序是不好的,因为我正在尝试在异常传播到传播堆栈之前对其进行装饰,并且顶级处理程序为时已晚。 这可以通过foo从现有类型(例如class FooPermissionError(OSError, FooError))中派生模块的特定异常类型来部分解决,但这并没有使将现有异常实例包装为新类型或修改消息变得更加容易。 Python的PEP 3134 “异常链接和嵌入式回溯”讨论了Python 3.0中接受的“链接”异常对象更改,以指示在处理现有异常期间引发了新异常。 我想做的是相关的:我需要它在早期的Python版本中也能工作,我不需要链,而只需要多态。什么是正确的方法?

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.