首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

捕获System.Exception等非特定异常是不好的做法?为什么?

捕获System.Exception等非特定异常是不好的做法,原因如下:

  1. 异常处理的目的是为了处理程序中的错误,而不是用来处理正常的业务逻辑。如果捕获了非特定异常,那么可能会捕获到一些不应该被处理的异常,导致程序出现错误或者崩溃。
  2. 非特定异常可能包含了大量的异常类型,这会导致异常处理代码变得非常复杂,难以维护和调试。而如果使用特定异常,则可以更加精确地处理异常,提高代码的可读性和可维护性。
  3. 非特定异常可能包含了一些不应该被捕获的异常,比如ThreadAbortException等,如果捕获了这些异常,可能会导致程序出现错误或者崩溃。

因此,建议在编写代码时,尽量使用特定异常来处理程序中的错误,避免使用非特定异常。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

必备 .NET - C# 异常处理

在本期内容中,我将回顾许多变更,并提供更新后编码指南,因为这些指南与异常处理(即捕获异常)相关。 捕获异常: 回顾 很好理解是,引发特定异常类型可以让捕获程序使用异常类型本身来确定问题。...可惜是,在决定不处理异常后,编写代码以便相同上下文内不同 catch 块能够处理异常是一项很繁琐做法。此外,重新引发相同异常会导致不得不再次调用双步异常进程。...对于 C# 2.0 及更高版本,所有异常都会作为源自 System.Exception 异常传播到 C# 程序集中,无论异常是否源自 System.Exception。...然而,在 C# 1.0 之前,如果通过方法调用(驻留在程序集中,而不是在 C# 中编写)引发源自 System.Exception 异常,则 catch(System.Exception) 块不会捕获异常...有关损坏状态异常需要注意一个技术问题是,只有当异常是由运行时引发时,才会跳过 catch System.Exception 块。

2.3K60

【深入浅出C#】章节 6: 异常处理和调试:异常概念和处理机制

常是在程序执行过程中出现预期事件或错误情况。它可能是由于输入错误、计算错误、资源不足、外部环境变化原因导致。...C#中异常类继承结构如下: System.Exception:是所有异常类基类,它包含了异常基本信息,如消息、堆栈跟踪。...二、捕获和处理异常 2.1 捕获特定类型异常 在 C# 中,可以使用 catch 块来捕获特定类型异常,并针对不同类型异常进行不同处理。...以下是未捕获异常一些可能后果: 程序崩溃:未捕获异常可能导致程序崩溃,终止执行,并在控制台或日志中显示错误消息。这会导致用户体验不好,甚至可能造成数据丢失或文件损坏。...过度使用异常处理可能会影响性能,因此应该尽量避免在正常流程中抛出和捕获异常。 使用特定异常类型:尽量使用特定异常类型来捕获特定错误,而不是使用通用 Exception 类型。

65440

设计异常解决方案几点注意事项

√ 要确保异常消息语法正确无误(指自然语言,如汉语、英语)。 √ 要确保异常消息中每个句子都有句号。...如果用catch语句块捕获了某个特定类型异常,并完全理解在catch块之后继续执行对应用程序意味着什么,那么我们说这种情况是对异常进行了处理。...× 不要在框架(是指供开发人员使用程序)代码中,在捕获具体类型不确定异常(如System.Exception、System.SystemException)时,把异常吞了。...× 避免在应用程序代码中,在捕获具体类型不确定异常(如System.Exception、System.SystemException)时,把错误吞了。...× 不要在为了转移异常而编写catch代码块中把任何特殊异常排除在外。 √ 考虑捕获特定类型异常,如果理解异常产生原因,并能对错误做适当反应。

70290

.NET----错误和异常处理机制

对于.Net类,一般异常类System.Exception派生自System.Object,通常不在代码中抛出System.Exception泛型对象,因为他们无法确定错误情况本质。   ...EndOfStreamException-------这个异常通常是因为读到文件末尾而抛出,流表示数据源之间数据流。...在异常捕获中,我们可以实现多个catch块来针对不同错误做出对应错误处理。...如果输入超过规定返回数字,则会抛出超出范围错误也就进入对应catch块。而输入数字也就进入了另外一个catch块进行处理。   下面我们看一看关于System.Exception属性。...捕获不同异常类型时,可以有行为不同代码块。在某些情况下,catch块基于异常内容执行不同操作。

60650

重温《Framework Design Guidelines》

(除非是ex、e、i约定俗成用法,或者其他特殊情况如工业标准、商标、历史问题、遗留代码、调用托管代码。)...2.5 异常 不要在框架代码中捕获System.Exception或System.SystemException,除非打算重新抛出。...不要在框架代码捕获具体类型不确定异常(比如System.Exception、System.SystemException,等等)时,把错误吞了。...总之不要捕获System.Exception和System.SystemException,要让用户知道哪里发生了问题。无论是不是框架代码,把异常吞了做法都很让人困扰,除非有充分理由。...不要正常控制流中使用异常,如果能够避免的话。 很常见到捕获System.Exception做跳转分支,以及明明有TryParse却还是用TryCatch代码。

1.2K41

C Sharp(十六)

C Sharp(十六) 發佈於 2018-12-01 这一篇,我们讲讲 C# 中异常处理 —— try、catch、finially。 什么是异常 异常是程序运行时错误,出现正常操作时未预料情况。...当发生时,系统会捕获这个错误并抛出异常。 在编写 iOS 程序时,我们可能很少使用异常,通常我们使用 NSError **error 这样二级指针来获取错误对象,处理不同错误。...try 语句由三部分组成: try 包含为避免出现异常而被保护代码 catch 是异常处理程序 finally 是在所有情况都会执行代码块,不论有没有异常 try { //... } catch...当一个异常发生时,我们应: 创建该类型异常对象 在适当 catch 子句处理 所有的异常类都继承自 System.Exception。...} catch (ExceptionType) { //异常类型作为参数,匹配该类型异常 } catch (ExceptionType Exp) { //特定异常对象作为参数,匹配该类型异常

38630

【JavaSE专栏70】自定义异常,用户根据自己需求创建异常类

使用自定义异常类时,通常做法是在方法中使用 throw 语句来抛出自定义异常,然后在调用该方法地方使用 try-catch 语句块来捕获并处理异常。...---- 使用自定义异常类时,通常做法是在方法中使用 throw 语句来抛出自定义异常,然后在调用该方法地方使用 try-catch 语句块来捕获并处理异常,以下是一个示例代码,演示了如何使用自定义异常类...为什么要使用自定义异常? 答:自定义异常是指根据自己需求创建异常类。在 Java 中,虽然有很多预定义异常类,但有时候这些异常类无法完全满足我们需求,因此需要创建自定义异常类。...答:使用自定义异常时,通常做法是在方法中使用 throw 语句抛出自定义异常,然后在调用该方法地方使用 try-catch 语句块捕获并处理异常。 四、自定义异常类可以有哪些属性和方法?...自定义异常可以更好地描述和处理特定异常情况,提供更详细错误信息,而预定义异常通常是一些通用异常类。

40030

写了挺久代码,却还被异常支配?

不好意思,有点想不起来了 面试官: emm, 还有个编译时异常,那你平时写代码提示有异常是怎么处理 小菜: 额,这个, 一般都会直接抛出异常 面试官内心OS:就这水平?...但是往往这么简单问题,你答不好,一样能让你 面试通知,录取砍薪资。...运行时异常 和 错误 都属于 受检可抛出结构。它们都是不需要也不应该被捕获可抛出结构。...这种做法称为 异常转移。 ? 因此我们不能为了简便,而直接捕获 Exception 这种异常超类。...空 catch 块会使异常达不到应有的目的 如果我们一定要选择忽略异常,那么明确做法应该是:在 catch 块中包含一条注释,说明为什么可以这样做,并且将变量名称命名为 ignored 派生异常 ?

54510

聊聊面试-NoClassDefFoundError 和 ClassNotFoundException 区别

,在 Java 中只有 Throwable 类实例才能被 try/catch 捕获或者声明抛出。...(try/catch)或者声明抛出(throw),Exception 还分两种情况,可检查异常 checked exception(编译期异常),检查异常 unchecked exception(运行期异常...) 可检查异常是编译期必须要显示处理异常,编译器会强制要求处理这种异常,不然编译就不会通过,检查异常是程序在运行时出现异常,大多是程序员处理不到导致程序问题,例如常见 NullPointerException...我简单列举一下: 捕获异常应该使用特定类型 Exception 没有对异常进行任何处理 为什么捕获特定类型异常 ?...主要有以下几点 因为你代码会被团队很多人阅读,宽泛使用 Exception 对所有异常进行处理会让别人不好理解你代码异常,程序主要目的也是要体现它语义,例如 Thread.sleep 是明确抛出

52610

Java异常处理机制

2、运行时异常和运行时异常       运行时异常都是RuntimeException类及其子类异常,如NullPointerException、 IndexOutOfBoundsException...,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。...这些异常一般是由程序逻辑错误引 起,程序应该从逻辑角度尽可能避免这类异常发生。       运行时异常是RuntimeException以外异常,类型上都属于Exception类及其子类。...从程序语法角度讲是必须进行处理异常,如果不 处理,程序就不能编译通过。如IOException、SQLException以及用户自定义Exception异常,一般情况下不自定义检查 常。   ...笔者认为,异常处理存在着一套哲学思想:对于一个应用系统来说,系统所发生任何异常或者错误对操作用户来说都是系统"运行时" 常,都是这个应用系统内部异常。

1.2K30

或性质及应用

比如5^7,比较方式如图 如果觉得相同为0不同为1不好记,也可以换一种记法,无进位相加,即让两数每一位都进行加法运算,但如果碰见两位都是1情况,按加法做法是结果为0再向前进一位,而异或就把这个进位舍弃掉即可...性质 0^N == N N^N == 0 或满足交换律和结合律 交换律可以理解,那为什么或满足结合律呢?...,a值变为a^b, 再执行第二条代码后,b值变为a^b^b,由结合律得a^b^b = a^(b^b),再由性质N^N == 0得a^b^b = a^0,再由N^0 == N得a^b^b...一个数组中有一个数出现了奇数次,其他数都出现了偶数次,怎么找到这个数 解法:因为N^N等于0,0^0于0,所以偶数个N做或结果为0,又因为N^0=N,所以奇数个N做或结果为N,所以这道题中,该数组所有数一起做或...做法:定义一个变量初始为0,让这个变量依次对该数组数做或,最后结果就是这个寻找数。

22810

☀️ 学会编程入门必备 C# 最基础知识介绍(六)——接口、命名空间、预处理指令、正则表达式、异常处理、文件输入与输出

常是在程序执行期间出现问题。C# 中常是对程序运行时出现特殊情况一种响应,比如尝试除以零。 异常提供了一种把程序控制权从某个部分转移到另一个部分方式。...C# 异常处理时建立在四个关键词之上:try、catch、finally 和 throw。 try:一个 try 块标识了一个将被激活特定异常代码块。后跟一个或多个 catch 块。...catch:程序通过异常处理程序捕获异常。catch 关键字表示异常捕获。 finally:finally 块用于执行给定语句,不管异常是否被抛出都会执行。...---- C# 中异常类 C# 异常是使用类来表示。C# 中异常类主要是直接或间接地派生于 System.Exception 类。...---- C# I/O 类 System.IO 命名空间有各种不同类,用于执行各种文件操作,如创建和删除文件、读取或写入文件,关闭文件

1.3K30

Java异常处理和设计

典型RuntimeException包括IOException、SQLException。...此时有两种情况: 如果声明抛出常是非运行时异常,此方法调用者必须显示地用try..catch块进行捕获或者继续向上层抛出异常。...如果声明抛出常是运行时异常,此方法可以用try..catch进行异常捕获处理,也可以不捕获,此方法无需使用throws声明抛出;此方法调用者可以选择地进行异常捕获处理,也可不捕获处理,同样也可以不使用...把底层原始异常直接传给用户是一种不负责任表现,通常做法是:程序先捕获原始异常,然后抛出一个新业务异常,新业务异常中包含了对用户提示信息,这种处理方式呗称为异常转译。...八、异常链(异常转译) 把底层原始异常直接传给用户是一种不负责任表现,通常做法是:程序先捕获原始异常,然后抛出一个新业务异常,新业务异常中包含了对用户提示信息,这种处理方式呗称为异常转译。

94410

【C++】一文全解C++中异常:标准库异常体系&自定义异常体系(含代码演示)

try: try 块中代码标识将被激活特定异常, 它后面通常跟着一个或多个 catch 块。...catch: 在您想要处理问题地方,通过异常处理程序捕获异常.catch 关键字用于捕获 常,可以有多个catch进行捕获。...{ // catch 块 cout << "Unkown Exception" << endl; } 2)异常抛出和捕获 【1】异常抛出和匹配原则 异常是通过 抛出对象而引发 , 该对象类型...它们是以父子类层次结构组织起来,如下所示: 常见标准库异常 【4】自定义异常体系:抛出派生类对象, 使用基类捕获 为什么不用C++标准异常体系呢?...这个需要使用RAII来处理资源管理问题。学习成本较高。 C++标准库异常体系定义得不好,导致大家各自定义各自异常体系,非常混乱。

21710

Java异常最常见八大问题

1.异常管理最佳做法 如果可以正确处理异常,则应该被捕获,否则应该抛出异常。 2.为什么try中定义变量不能用于catch或finally? 原因是你不知道在try块中哪里会抛出异常。...在声明对象之前抛出异常是很有可能。对于这个特定例子,这是真的。 3.为什么Double.parseDouble(null)和Integer.parseInt(null)会抛出不同异常?...他们实际上抛出不同例外 这是JDK问题。它们由不同开发人员开发,所以不值得太多思考。 4.在Java中常用运行时异常 这只是其中一部分。...IllegalArgumentException ArrayIndexOutOfBoundsException 当条件不满足时,它们可用于if语句中 5.我们可以在同一个catch子句中捕获多个异常吗?...8.为什么开发人员默默地使用异常? 有很多时间代码段会发生如下情况。如果正确处理异常非常重要,为什么开发人员仍然这样做?

37020
领券