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

异常类应该有多具体?

异常类应该尽可能具体,以便更好地识别和处理错误。

异常类是一种特殊的类,用于表示程序中可能出现的错误或异常情况。它们通常包含有关错误的详细信息,例如错误代码、错误消息和其他相关信息。异常类应该尽可能具体,以便更好地识别和处理错误。

例如,如果程序中可能出现多种类型的错误,那么应该为每种错误类型创建一个具体的异常类。这样,当程序抛出异常时,可以更容易地识别错误类型,并采取相应的处理措施。

异常类应该包含足够的信息,以便程序员能够快速识别错误并采取适当的措施。例如,如果程序中出现了一个“文件未找到”的错误,那么应该创建一个具体的异常类,包含有关文件名、路径等信息。这样,程序员可以更快地定位错误,并采取相应的处理措施。

总之,异常类应该尽可能具体,以便更好地识别和处理错误。这样可以提高程序的可靠性和可维护性,并减少开发和测试的时间和成本。

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

相关·内容

Python编程思想(33):异常异常捕获

异常 当 Python解释器接收到异常对象时,如何为该异常对象寻找 except块呢?注意到前面的代码中的except块,这个块是专门用于处理该异常及其子类的异常实例。...Python的所有异常都从 BaseException派生而来,提供了丰富的异常,这些异常之间有严格的继承关系,下图显示了 Python的常见异常之间的继承关系。 ?...从这张图中可以看出, Python的所有异常的基是 Base Exception,但如果用户要实现自定义异常,则不应该继承这个基,而应该从 Exception继承。...上面程序中的3种异常,都是非常常见的运行时异常,读者应该记住这些异常,并掌握在哪些情况下可能出现这些异常。 2. 异常捕获 Python的一个 except块可以捕获多种类型的异常。...下面演示了 Python的异常捕获: 示例代码:multi_exception_demo.py import sys try: a = int(sys.argv[1]) b = int

72220

【C++】异常处理 ⑧ ( 标准异常 | 标准异常继承结构 | 常用的标准异常 | 自定义异常继承 std::exception 基 )

一、抛出 / 捕获 多个类型异常对象 1、标准异常 在 C++ 语言中 , 提供了一系列的 " 标准异常 " , 这些 " 标准异常 " 都继承了 std::exception 基 , 在 标准库...中 , 抛出的异常 , 都是 标准异常 , 都是 std::exception 的子类 ; 2、标准异常继承结构 标准异常 定义在 std 命名空间 , 标准异常 std::exception... 3、常用的标准异常 常用的标准异常如下 : std::exception 是标准异常 , 定义了 what() 函数 , 该方法返回一个指向 C 字符串的指针 ,..., 会抛出此异常 ; 二、自定义异常继承 std::exception 基 1、自定义异常继承 std::exception 基 首先 , 导入 头文件 ; #include... 然后 , 自定义继承 std::exception , 通过构造函数设置异常信息 , 重写 what 函数 , 在该函数中返回异常信息 ; // 自定义实现标准异常

35010

Java异常

catch子句的异常,或者属于该异常的子类,则认为生成的异常对象与catch块捕获的异常类型相匹配。...* 对于有多个catch子句的异常程序而言,应该尽量将捕获底层异常的catch子 句放在前面, * 同时尽量将捕获相对高层的异常的catch子句放在后面。...我们知道,异常异常的实例对象,我们可以创建异常的实例对象通过throw语句抛出。...当应用试图根据字符串形式的名构造,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。    ... 不允许访问某类异常 InstantiationException  当应用程序试图使用Class中的newInstance()方法创建一个的实例,而指定的对象无法被实例化时,抛出该异常

41110

异常工具-Assert

# Assert Assert断言工具是直接从org.springframework.util.Assert中拷贝出来的,api的用法和定义和Spring Assert一模一样,在Spring Assert...的使用经验可无缝迁移到该Assert中 区别点在于对于断言的异常,不再像Spring一样抛出IllegalArgumentException,默认转为抛出自定义的ValidException,与全局异常紧密结合...同时提供了所有重载的接口,支持通过AbstractException子类class,构造异常实例,根据class抛出对应异常,目前支持推断所有自定义异常中,具有单字符串构造方法的异常实例 Assert...解决的问题是经过前置参数过滤后,业务层面的校验,不得不包装统一返回体,和经过if else判断后进行返回的场景 或是结合全局异常后,每次抛出异常必须得写try catch代码的场景 目的在于进一步精简代码...# 基本使用 以isTrue为例,判断条件是否成立,如果不成立则抛出异常,同时带有异常message Assert.isTrue(0==1, "条件不满足"); 支持推断AbstractException

43450

log日志中不打印异常栈的具体信息

问题与分析 最近在查项目的log时发现报了大量的NPE(NullPointerException),诡异的是只log了Exception的名,却没有具体的堆栈信息,以致于无法对该NPE异常进行准确定位...这是因为jvm自身存在着优化机制,但一个同样的异常重复出现并被打印到log后,jvm可以不提供具体的堆栈信息来提高性能。...谷歌翻译如下: 服务器VM中的编译器现在为所有“冷”内置异常提供正确的堆栈回溯。出于性能目的,当抛出这样的异常几次时,可以重新编译该方法。...重新编译之后,编译器可以使用不提供堆栈跟踪的预分配异常来选择更快的策略。要完全禁用预分配的异常,请使用以下新标志:-XX:-OmitStackTraceInFastThrow。...重启服务器时jvm被重新启动,这样再遇到同样的Exception时就会打印出来,当然如果后续如果重复遇到同样的Exception还是无法打印出具体异常栈信息。

92220

Java-抛出异常、自定义异常

异常处理常用方法: 常用的异常处理方法有: 一、try()catch() 语句 二、throw / throws 语句 三、自定义异常 用途: 众所周知,当程序运行过程中,如果遇到了错误(比如数组下标越界...但是在写完throw/throws 语句后,异常处理并没有结束,因为这里只是简单声明了,我的这个成员方法中的可能会抛出异常,并没有写具体该如何处理这个异常,所以这是在主函数中,就要用try()catch...throw new Exception(); } } } 我们再看看输出范例: 三、自定义异常 自定义异常是逃不开,也是新手接触最少的,其实它的基本使用方法还是很简单的,自定义异常处理...(2)、重写toString()函数,这是最重要的一点,再toString函数中,描述具体发生了什么错误导致了异常的抛出。...,这才catch()语句中声称自定义的异常对象,并输出具体信息: java异常的处理大概就这些类型,如果有疑问可以给我留言我再完善。

1.3K20

Python异常捕获及自定义异常

我们可以在except后面接异常的类型,将异常类型捕获到,也可以接多个异常类型,同时捕获多个异常....三、异常异常传递 在Python中定义了所有异常的基BaseException,常规异常的基Exception,所有异常都继承自BaseException,代码中经常出现的异常都继承自Exception...上面的示例中,我们捕获异常时,可以判断会出现的异常类型,但是实际开发中,代码比上面的示例复杂得多,出现的异常我们不能提前判断,这时候就可以用Exception来捕获....四、自定义异常 正常来说,Python提供的异常类型已经满足我们的使用了,但是有时候我们有定制性的需求,我们可以自定义异常,继承自Error或Exception就可以了.参考代码: class MoneyException...(Exception): '''自定义的异常''' def __init__(self, money): self.money = int(money)

1.3K30

第38期:MySQL 时间分区具体实现

比如保留10年数据,每次查询基于某个具体年份做为过滤条件,那按照年拆分肯定最好。...比如语句: select count(*) from ytt_pt1 where year(log_date) = '2018' ; 看下执行情况: MySQL扫描所有分区,查询执行时间9秒。...filtered: 100.00 Extra: Using where 1 row in set, 1 warning (0.00 sec) 如果非坚持这种写法,可以给优化器一个提示,具体到指定分区去检索数据...Using where 1 row in set, 1 warning (0.00 sec) 第二种:对于每年的数据,单独划分12个分区,也就是按照年月联合维度来分区,一共有144 个分区,每个分区对应具体某一年某一月数据...时间字段又常按照年,月,日三种不同的维度来具体实现,并且详细讲述了具体的实现方式以及适用场景。

64931

巧用断言&异常处理简化业务异常代码

return result;      }      // ...other check        // ...do something      return result;  } 但是我们可以用异常处理...增加异常处理:  @Slf4j  @ControllerAdvice  public class GlobalExceptionHandler {      @ExceptionHandler(value...ApiCode.SERVICE_ERROR.getMessage());          }          return ResponseBean.error(e.getCode(), e.getMessage());      }  } 增加异常...这只是单接口的情况下,在业务且复杂的情况下能给我们节省更多的开发时间,把精力集中在核心业务上。...附上代码 统一异常处理:  /**   * 统一异常处理   */  @Slf4j  @ControllerAdvice  public class GlobalExceptionHandler {

69320

异常解决:jvm配置+OmitStackTraceInFastThrow 导致不打印日志具体信息

背景 运营人员反馈线上某些操作异常,导致无法继续,但是只有个别,通过查询发现异常如下: ? 很奇怪的一种发现,api去调dubbo发现居然只有api的空指针,但是没有具体的原因。继续排查dubbo。...通过invoke 调用dubbo接口发现,异常居然打印不全.....只有java.lang.NullPointerException ? 百思不得其解........查询其他异常没有发现~ 复现也未复现出来~ ......总算复现以上bug,但是为什么只有空指针异常没有详细信息呢? 通过查询jdk5以后jvm做了一个优化,当同样错误日志频繁打印,JIT会重新编译抛出没有堆栈的信息异常。...最后到一定数量虚拟机就直接吃掉堆栈错误信息,只剩下空指针异常~ ? 配置打印全部日志 -XX:-OmitStackTraceInFastThrow ? 可以看出打印了全部日志 ?

1.3K10

【C++】异常处理 ⑥ ( 异常生命周期 | 抛出自定义对象异常 | 自定义对象异常的生命周期 | 抛出 自定义引用类型 异常 | 抛出 自定义指针类型 异常 )

一、C++ 异常处理 - 抛出自定义对象异常 1、抛出 异常对象 如果 抛出的 指针类型 , 指向的是 实际的对象 , 那么就要涉及到 对象的 内存空间的 分配 与 释放 ; 涉及到 内存空间 的 申请...和 释放 , 就需要考 讨论 异常 的生命周期 , 什么时候申请内存 , 什么时候释放内存 ; 2、代码示例 - 抛出 异常对象 下面的代码中 , 声明了 3 个自定义 Exception1 , Exception2...1、异常设置 构造函数 / 析构函数 / 拷贝构造函数 为异常对象设置 构造函数 , 析构函数 , 拷贝构造函数 ; 分析 异常对象 在不同的阶段 的 构造 和 析构 情况 ; class Exception3..., 因此这里推荐 拦截 引用类型异常 ; 异常处理完毕后 , 这个 异常对象 要被析构掉 ; 代码示例 : #include "iostream" using namespace std; // 异常...四、C++ 异常处理 - 抛出 自定义指针类型 异常 1、可以同时拦截 指针类型 和 引用类型 在 try-catch 代码块中 , 可以同时拦截 指针类型 和 引用类型 的 异常 , 系统会将这两种类型

15410

python所有的标准异常

Mark一下 EOFError   NameError   SystemError     SystemError  我目前只见过这四个,以后会慢慢总结的(非要立个flag你快乐吗) python所有的标准异常...: 异常名称 描述 BaseException 所有异常的基 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常规错误的基...StopIteration 迭代器没有更多的值 GeneratorExit 生成器(generator)发生异常来通知退出 SystemExit Python 解释器请求退出 StandardError...所有的内建标准异常的基 ArithmeticError 所有数值计算错误的基 FloatingPointError 浮点计算错误 OverflowError 数值运算超出最大限制 ZeroDivisionError...操作系统错误 WindowsError 系统调用失败 ImportError 导入模块/对象失败 KeyboardInterrupt 用户中断执行(通常是输入^C) LookupError 无效数据查询的基

70320
领券