异常规范

WRF进阶:定制Vtable文件解析非标准气象数据源——以ERA5-Land土壤湿度为例 本文详细介绍了如何为WRF模式定制Vtable文件,以解析非标准气象数据源ERA5-Land的土壤湿度数据。通过剖析GRIB文件结构、详解Vtable编写逻辑与语法,并提供了从数据验证到metgrid配置的完整实战流程,帮助用户突破标准数据源限制,实现高精度陆面过程模拟。 阅读详情
异常增强了API的一致性。如果使用异常,那么报告错误的方式是固顶的,从而保证了API的一致性
想在面向对象框架中统一使用返回值来报告错误是不可能的,在这种情况下,唯一的选择是使用返回值之外的错误报告方法,比如异常
使用异常使得对于开发人员处理错误的位置更加灵活
更容易使错误处理局部化
错误码很容易被忽略,而且通常都被忽略
异常可以包含丰富的信息来对错误的原因加以描述
异常允许用户定义未处理异常的处理程序
异常有助于instumentation
不要返回错误码
要通过抛出异常的方式来报告操作失败
如果一个方法无法完成它的名字对应的任务,那么因该认为这是方法层面的操作失败,这时应该抛出异常
考虑通过调用System.Environment.FailFast(.NET2.0版新特性)来终止进程,而不要抛出异常,如果代码遇到严重问题,已经无法继续安全的执行。
不要在正常的控制流中使用异常,如果能够避免的话
考虑抛出异常可能会对性能造成影响
要为所有的异常撰写文档,并把它们作为协定的一部分,前提是这些异常是由于违反了公有成员的协定而抛出。
不要让共有成员根据某个选项来决定是否抛出异常
不要把异常用作公有成员的返回值或输出参数
考虑使用辅助方法来创建异常
不要在异常筛选器中抛出异常
避免显式地从finally代码块中抛出异常。隐式的抛出异常,即在调用其他方法时由其他方法抛出异常,是可以接受的
 
考虑优先使用System名字空间中已有的异常,而不是自己创建新的异常类型
要使用自定的异常类型,如果对错误的处理方式与其他已有的异常有所不同
不要仅仅为了拥有自己的异常而创建并使用新的异常
要使用最合理、最具针对性的异常
 
 
要在抛出异常时为开发人员提供丰富而有意义的错误消息
要确保异常消息的语法正确无误
要确保异常消息中的每个句子都有句号
避免在异常消息中使用问号和惊叹号
不要在没有得到许可的情况下在异常消息中泄漏安全信息
不要在没有得到许可的情况下在异常消息中泄漏安全信息
 
不要在框架的代码中,在捕获具体类型不确定的异常时,把错误吞了
避免在应用程序的代码中,在捕获具体类型不确定的异常时,把错误吞了
不要在为了转移异常而编写的catch代码块中把任何特殊的异常排除在外
考虑捕获特定类型的异常,如果理解该异常在具体环境中产生的原因,并能对错误作出适当的反应
不要捕获不应该捕获的异常。通常应该允许该异常沿着调用栈向上传递
要在进行清理工作时使用try-finally,避免使用try-catch。对精心编写的异常代码来说,try-catch的使用频率要比try-catch高的多
要在捕获并重新抛出异常时使用空的throw语句。这是保持调用栈最好的方法
不要用无参数的catch块处理不符合CLS规范的异常(不是派生自System.Exception的异常)
 
考虑对较低层次抛出的异常进行适当的封装,如果较低层次的异常在较高层次的运行环境中没有什么意义。
避免捕获并封装具体类型不确定的异常
要在对异常进行封装时为其指定内部异常
 
不要抛出System.Exception或System.SystemException异常
不要在框架代码中捕获System.Exception或System.SystemException异常,除非打算重新抛出
避免捕获System.Exception或System.SystemException异常,除非是在顶层的异常处理器中
不要抛出System.ApplicationException或从它派生新类
要抛出InvalidOperationException异常,如果对象处于不正确的状态
要抛出ArgumentException异常或其子类,如果传入的是无效的参数。要尽可能的使用位于继承层次末尾的类型
要在抛出ArgumentException异常或其子类时设置ParamName属性
要在属性的设置方法中,以value作为隐式值参数的名字
不要让共用API显式地或隐式的抛出NullReferenceException、IndexOutOfRangeException或AccessViolationException异常
不要显式的抛出StackOverflowException异常。因该只有CLR才能显式的抛出该异常
不要捕获StatckOverflowException异常
不要显式地抛出OutOfMemoryException异常。应该只有CLR才能抛出该异常
不要显式地抛出InteropException、ComException及SEHException异常。应该只有CLR才能抛出这些异常
不要显示地抛出ExecutionEngineException异常。
 
避免太深的继承层次
要从System.Exception或其他常用的异常基类派生新的异常类
要在命名异常类时使用”Exception”后缀
要使异常可序列化。为了使异常能够跨应用程序域和跨远程边界时仍然能够正常工作,这样做是必须的。
要为所有的异常(至少)提供下面这些常用的构造函数
public calss SomeException : Exception : ISerializable
{
       public SomeException();
       public SomeException(string message);
       public SomeException(string message,. Exception inner);
 
       //this constructor is needed for serialization
       protected SomeException(SerailizationInfo info, StreamingContext context);
}
 
要通过ToString的重载方法来报告对安全敏感的信息,前提是必须先获得相应的许可,如果无法获得许可,那么应该在返回的字符串中除去对安全敏感消息
要把与安全相关的信息保存在私有的异常状态中。要确保只有可信任的代码才能得到该信息
考虑为异常定义属性,这样能从程序中取得与异常有关的额外信息
 
不要因异常可能对性能造成的负面影响而使用错误码。要提高性能,既可以使用Tester-Doer模式,也可以使用Try-Parse模式
考虑在方法中使用Testor-Doer模式来避免因异常而引起的性能问题,如果该方法在普通的场景中都可能会抛出异常。
考虑在方法中使用Try-Parse模式来避免因异常而引起的性能问题,如果该方法在普通的场景中都可能会抛出异常
要在实现Try-Parse模式时使用”try”前缀,并用布尔类型作为方法的返回类型
要为每个使用Try-Parse模式的方法提供一个会抛出异常的对应成员。
 
基于cat12搞定SBM的ROI的统计分析——vertex水平和ROI水平的双样本T检验 前言 一、Atlas皮层图谱介绍 二、SBM分析——主要以皮层四种常用指标中的厚度(thickness)和沟深(depth)为主 阅读详情

相关推荐

SNAP计算哨兵2号的LAI/FVC/FAPAR

SNAP的计算LAI方法是基于PROSAIL模型,集成的模块,很方便。首先要下载SNAP软件,下载步骤见。

所有专家都曾始于新手 2447

10.5 异常规范

◆ 1、异常规范exception specification)是指:提供了一种方案,可以随着函数声明列出该函数可能抛出的异常,并保证该函数不会抛出任何其他类型的异常。例如,在stack类定义中可有:     void Push(const T&data) throw(pushOnFull) ;     T Pop() throw(popOnEmpty); //红色部分是异常规范

芝麻软件工作室的专栏 658

2026年全国青少年信息素养大赛算法应用主题赛C++赛项【决赛】模拟卷1:文末附答案

2026年全国青少年信息素养大赛算法应用主题赛C++赛项【决赛】模拟卷1:文末附答案

王老师青少年编程 1089

C++笔记(基础6):异常

C++笔记(基础6):文件

Sunrise的博客 614

Mxnet在Windows10, vs2015平台的编译及开发-CPU版本

环境: 基础配置:Windows10,cmake3.11.1,vs2015,QT5.11.1 mxnet配置:OpenBLAS-v0.2.9-Win64-int32,opencv3.4.1 相关资源百度云链接:https://pan.baidu.com/s/1pkPzm9vVRkHRc6KOkiyX9g 密码:2848 编译成功的项目百度云链接(在基础配置相同的情况下可以直接使用 ):...

Jenny Doe 5400

C++异常规范

◆ 1、异常规范exception specification)是指:提供了一种方案,可以随着函数声明列出该函数可能抛出的异常,并保证该函数不会抛出任何其他类型的异常。例如,在stack类定义中可有:     void Push(const T&data) throw(pushOnFull) ;     T Pop() throw(popOnEmpty); //红色部分是异常规范 成员函数

寂寞青山的博客 2782

java 异常 规范_java 异常规范

异常规范异常介绍Throwable所有Exception和Error的父类.Error致命错误. 项目自身存在问题, 诸如格式有问题, 编译版本不对, 堆栈溢出等, 项目在出现ERROR的情况下是不应该运行的. 同时, 程序遇到Error时, 程序不需要, 通常也是没有能力做处理的, 只能够停止程序针对项目或者运行环境做人工处理才行.Exception区别于Error, 是程序可以自己处理的异常....

weixin_42509507的博客 408

java 异常 规范_Java 异常规范

1. 只针对异常情况使用异常,不要用异常来控制流程1 try{2 int i = 0;3 while (true) {4 range[i++].doSomething();5 }6 } catch(ArrayIndexOutOfBoundsException e) {7 //...8 }说明:1) 上述反例企图通过捕获异常来结束无限循环,以此达到遍历数组的目...

weixin_39739661的博客 286

如何规范的使用Java异常

写了几年代码,对于异常这个概念既熟悉又陌生,看了很多同事写的代码也都是各有各的风格,对于实际项目当中的非正常流程是应该返回错误代码还是抛出异常?抛出什么样的异常?从来没有认真的思考和总结过。本文参照一些技术书籍及博客论坛对该如何规范的使用异常的使用进行了总结。

鹏程小站 1161

java 规范异常的处理_规范-异常处理

1. 为什么需要规范异常处理?首先,规范异常处理也是为了后期能更好的维护,减少程序出错,别再哪里都try{}catch(){},对于有强迫症的我,规范处理异常是必不可少的;规范异常处理能让你代码变得更加整洁、干净。2. 异常处理分类异常处理方式:service抛出异常,controller统一try{}catch(){}对于一些io、http请求异常能直接处理的就直接try{}catch(){}...

weixin_33848693的博客 355

异常日志规范

异常日志规范

xike1024的博客 1147

异常规范 C++11

异常规范 C++11 noexcept throw

xkdlzy的专栏 9480

C++的异常的使用和规范

c语言的错误处理,c++的异常的使用,c++的异常的原理,c++的使用规范

m0_73693552的博客 1149

C++中的异常处理机制以及异常规范

以下代码运行环境为64位系统下的VS2013 C++中的异常情况: 语法错误(编译错误):比如变量未定义、括号不匹配、关键字拼写错误等等编译器在编译时能发现的错误,这类错误可以及时被编译器发现,而且可以及时知道出错的位置及原因,方便改正。 运行时错误:比如数组下标越界、系统内存不足等等。这类错误不易被程序员发现,它能通过编译且能进入运行,但运行时会出错,导致程序崩溃。 为了有效

scmuzi18的博客 1万+

c++ 异常规范

在C++中,可以在函数声明后指明可能会抛出的异常类型。但是,异常规范的使用是有争议的,而且在某些情况下可能会引发不预期的问题。:当函数实现变更时,异常规范可能需要重新评估和更新,这可能会导致维护问题。:异常规范限制了函数可能抛出的异常类型。如果函数抛出了异常规范外的异常,:在某些编译器和平台上,异常规范可能导致额外的运行时开销。对性能的影响更为正面,并且在现代C++编码中更为推荐。这可能导致程序意外地终止。规范,它表示函数不会抛出异常。:从C++11开始,引入了。

強雲的博客 323

规范-异常处理

1. 为什么需要规范异常处理? 首先,规范异常处理也是为了后期能更好的维护,减少程序出错,别再哪里都try{}catch(){},对于有强迫症的我,规范处理异常是必不可少的;规范异常处理能让你代码变得更加整洁、干净。 2. 异常处理分类 异常处理方式: service抛出异常,...

chuanaiqi5565的博客 321

运营版打包同城交友网站源码带17万会员数据婚恋征婚交友网站含支付宝免签接口.txt

运营版打包同城交友网站源码带17万会员数据婚恋征婚交友网站含支付宝免签接口

使用javaJDBC连接hive数据,实现简单的操作!

使用javaJDBC连接hive数据,实现简单的操作!

上一篇: 反射与属性
RedRiver331
博客等级 码龄23年 0粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值