应该始终以以下方式重新引发异常:
try { ... } catch (Exception ex) { ... throw; }
重新抛出如下所示的异常将混淆原始异常,并丢失原始堆栈跟踪。一个人绝对不要这样做!捕获和重新抛出之前的堆栈跟踪将丢失。
try { ... } catch (Exception ex) { ... throw ex; }
人们不应该使用异常代替常规的流控制结构,例如if-then语句和while循环。这种反模式有时称为“棒球异常处理”。
这是反模式的示例:
try { while (AccountManager.HasMoreAccounts()) { account = AccountManager.GetNextAccount(); if (account.Name == userName) { //我们找到了 throw new AccountFoundException(account); } } } catch (AccountFoundException found) { Console.Write("这是您的帐户详细信息: " + found.Account.Details.ToString()); }
这是一种更好的方法:
Account found = null; while (AccountManager.HasMoreAccounts() && (found==null)) { account = AccountManager.GetNextAccount(); if (account.Name == userName) { //我们找到了 found = account; } } Console.Write("这是您的帐户详细信息: " + found.Details.ToString());
在代码中几乎没有(有人说不!)捕获通用异常类型的原因。您应该只捕获预期会发生的异常类型,因为否则会在代码中隐藏错误。
try { var f = File.Open(myfile); // 做点什么 } catch (Exception x) { // 假设找不到文件 Console.Write("Could not open file"); // 但可能由于文件处理代码中的错误而导致错误是NullReferenceException? }
最好做:
try { var f = File.Open(myfile); // 做点什么 which should normally not throw exceptions } catch (IOException) { Console.Write("File not found"); } // 不幸的是,这个不是从上面得出的,所以单独声明 catch (UnauthorizedAccessException) { Console.Write("Insufficient rights"); }
如果发生任何其他异常,我们有意让应用程序崩溃,因此它直接进入调试器,我们可以解决问题。我们绝对不能在程序之外发生任何其他异常的情况下交付程序,因此发生崩溃不是问题。
以下示例也是一个不好的例子,因为它使用异常来解决编程错误。那不是他们设计的目的。
public void DoSomething(String s) { if (s == null) throw new ArgumentNullException(nameof(s)); // 实施在这里 } try { DoSomething(myString); } catch(ArgumentNullException x) { // 如果发生这种情况,我们会出现编程错误,我们应该检查 // 为什么myString首先是null。 }
集成百度移动统计后报错 Q:集成百度移动统计后,开始没什么问题,但最近一段时间每次运行都会先打印出一堆错误信息,并且会重复好多遍 A:造成这种情况是由于sdk捕获异常。可能是网络环境不稳定引起的日志发送失败,网络环境正常的话会自行恢复。可以再继续观察一下,如果仍有问题,可以将问题发送至apptongji@baidu.com 会有专人为您解答。 为什么自定义事件被归入[未知]? Q:为什么自定义事件
问题内容: 异常存储在哪里?堆,堆。如何为异常分配和释放内存?现在,如果您有多个需要处理的异常,是否创建了所有这些异常的对象? 问题答案: 我假设为异常分配的内存分配方式与所有其他对象(在堆上)分配方式相同。 这曾经是个问题,因为您不能为OutOfMemoryError分配内存,这就是直到Java 1.6之前 才没有堆栈跟踪的原因。现在,它们也为stacktrace预分配了空间。 如果您想知道在抛
在electron打包的时候或者运行electron-builder install-app-deps的时候会报错,有人遇到这样子的问题了吗 node版本是 21.2.0 electron版本是29.4.3 electron-builder是24.13.3 不知道是不是那些C++的包导致的,help! 我rebuild了之后还是不行
在application.dispatcher.catchException(配置文件, 或者可通过Yaf_Dispatcher::catchException(true))开启的情况下, 当Yaf遇到未捕获异常的时候, 就会把运行权限, 交给当前模块的Error Controller的Error Action动作, 而异常或作为请求的一个参数, 传递给Error Action. 在Error A
主要内容:try/catch语句,C#中的异常类,自定义异常类,抛出异常在 C# 中,异常是在程序运行出错时引发的,例如以一个数字除以零,所有异常都派生自 System.Exception 类。异常处理则是处理运行时错误的过程,使用异常处理可以使程序在发生错误时保持正常运行。 C# 中的异常处理基于四个关键字构建,分别是 try、catch、finally 和 throw。 try:try 语句块中通常用来存放容易出现异常的代码,其后面紧跟一个或多个 catch 语句
异常是程序在执行期间产生的问题。C++ 异常是指在程序运行时发生的特殊情况,比如尝试除以零的操作。 异常提供了一种转移程序控制权的方式。C++ 异常处理涉及到三个关键字:try、catch、throw。 throw: 当问题出现时,程序会抛出一个异常。这是通过使用 throw 关键字来完成的。 catch: 在您想要处理问题的地方,通过异常处理程序捕获异常。catch 关键字用于捕获异常。 try