关于异常的使用心得

作者:lythm

工欲善其事,必先利其器.在做一个项目时必定要先做好调试除错的准备在面向过程编程的时代都是以检测
返回的错误代码来判断错误,可是这种方法的缺点是如果编写某一操作的时候可能出现的错误代码(比如说
硬件操作)太多,那么最终用户将会陷入倒无穷无尽的检测代码中,可能会是这个样子

UINT  err=Functionxx(...);

if(err==xxx)
...
if(err==xxx)
...
...
...
省略100行

只有这样程序才能在出现意外的时候有所相应和恢复,但是由于错误处理太庞大了最终用户很可能这样

if(Functionxx()!=SUCEEDED)
exit(0);

这样某些可能可以恢复的操作也无法幸免了,(比如说网络连接超时,终止运行太过分了吧,只要弹出个对话
框就行了)

在面向对象编程的时候,不可否认,很多人仍然还是这样排错的,其实各种面向对象的语言都提供了异常处
理的手段(比如说Object  Pascal,C++,本文以C++为例)

下面是我的关于异常的一些使用心得

对于各种用户来说,并不是每一种错误都是他关心的,特别是小组开发的时候比如某一模块是关于文件操作
的,那么编写这个模块的程序员只要注意关于文件操作失败的异常就行了,而网络模块的程序员只要知道网
络出错的错误处理就行了,因此,我们可以定义一个这样的类

class  CBasicException
{
CBasicException(...);
char*  GetDescription();
UINT  GetErrorCode();
...
};

然后再从这个类继承几个子类
CFileException,CNetException...
然后和具体某一类错误相关的详细的异常分别从上面的类里面继承,比如文件打开失败,空间不够...等等
可以从CFileException继承,而连接超时..等等可以从CNetException继承,如此一来就将错误分类了整个
类层次是这样的
CBasicException
/ /
CFileException CNetException
/ /              / /
COpenFailed ... CTimeOut ...

之后将各个错误码和相应的异常对应起来,一些不太重要的信息可以封装在一个异常里,比如文件打不开可
能是空间不够或共享冲突...,都可以放在一起,如果以后要专门处理某一样,比如空间不够,再从相应的基
类继承即可(COpenFialed)

然后你的函数应该这样实现

CMyfunc()
{
...
throw  Cxxx(...);
}
而在相应的调用部分则可以这样写
void  Operation1()
{
try{
Myfunc()
}
catch(CFileException&  e)//处理文件
{
printf("
throw;//重新抛出,如果搞定就不用再抛出了
}
catch(CNetException&  e)//网络
{
...
throw;
}
}
这样只要catch想要处理的异常就行了
但是你的主函数应该这样写

void  main()
{
try{
Opertion1();
Operation2();
Operation.....
...
}
catch(Cxxx&  e)//处理未捕获的重要异常
{
...
}
catch(CBasicException&  e)//对你所封装的错误总的处理
{
...
}
catch(...)//其他异常,未被封装,比如除0
{
...
}
}
这样处理就合理多了
而且如果在异常的描述里加上出错地点就更好了,比如出错函数名
不过千万不要将异常基类的catch写在子类的上面否则子类的catch可能永远不会工作了
比如:

try{
...
}
catch(CBasicException&  e)
{
...
}
catch(CFileException(&  e)
{
...
}
这样后面的catch就再也不会被执行了

另外在类的构造函数和析构函数里不能返回值的,这时就只能用异常了

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
光伏电池的异常检测与发电产能预测是一个重要的问题,可以通过数学建模来解决。在建立数学模型时,可以考虑以下几个方面。 首先,可以基于知识建模。通过建立专家知识库,收集和整理光伏电池的工作原理、特性和异常情况等知识,将这些知识转化为数学模型的形式。这种方法的优势在于模型相对简单,能够对一些极端情况进行建模,但模型的精度、及时性和可迁移性可能较差,成本也较高。\[2\] 其次,可以基于机理建模。通过深入理解光伏电池的物理机理,建立包含变量空间较大、具有可解释性的模型。这种方法的优势在于能够覆盖更多的变量和情况,但需要大量的参数和计算复杂度较高,无法对复杂流程中相互耦合的实体进行建模。 另外,可以基于数据建模。通过收集和分析大量的光伏电池运行数据,建立模型来预测异常情况和发电产能。这种方法的优势在于模型精度较高,能够动态更新,但对数据的数量、质量和精度要求更高,无法解释模型的内在机理。\[2\] 综上所述,光伏电池的异常检测与发电产能预测可以通过基于知识、机理或数据的数学建模方法来解决。根据具体情况和需求,可以选择适合的建模方式来提高模型的准确性和实用性。 #### 引用[.reference_title] - *1* [优化 | 谈谈运筹学在工业界应用的心得体会](https://blog.csdn.net/m0_37591666/article/details/126447857)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [一文看懂数字孪生,工信部权威白皮书](https://blog.csdn.net/cf2SudS8x8F0v/article/details/109733143)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nicrosoft

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值