一种简单的不依赖于编程语言的异常处理方法

2023-10-22 19:38

本文主要是介绍一种简单的不依赖于编程语言的异常处理方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

现在有很多支持异常处理的编程语言。我现在想说的是在 C 语言等不支持异常处理的语言中怎样实现多路的异常处理功能。

首先,所有可能抛出异常的函数,都返回一个布尔型值。当返回值为真时,表示没有异常。否则表示有异常。此外用一个全局(或线程全局)变量记录异常信息。

第二,在函数内,返回值一开始置为真。异常一旦抛出(可以是从库函数如 fputs 等引发,也可以是从其他抛出异常的函数返回),就将返回值置为假,再跳转到回收资源处理位置(类似于 finally),最后返回。在异常发生时,加入异常信息及当前函数信息(最好是在 finally 处理的一开始判断是否有异常,如果有就加入本函数的信息)。

第三,对于特定意义要分离的异常类型(比如想把网络异常与内存异常分离,内存异常通过普通异常渠道通知,而网络异常要有一些不同),可以通过参数传入一个布尔型变量的地址,通过修改该布尔型变量的值来表示是否有特定类型的异常(如网络异常)。这样,当外面的函数捕获异常后,可以判断是否网络异常还是其他异常。

第四,如果异常捕获后要从中恢复,一般有两种方法:备份-恢复及日志-回滚。备份-恢复是指在最外层需要恢复异常的函数在调用可能发生异常的函数前备份所有将被影响到的数据,然后一旦发生异常就恢复所有数据。日志-回滚是指最外层函数创建一个日志,然后传给被调用的函数。每个修改数据的函数都往指定日志记录恢复信息。一旦发生异常就回滚整个日志中所记录的修改。显然备份-恢复方法比较简单,出错的可能性也较小,在能使用它的时候尽量使用它。

恢复的用处主要是重试。需要注意的是如果重试多次不成功,可能需要再向外继续抛出异常,而不是忽略掉,否则可能影响程序后续的处理过程。

这篇关于一种简单的不依赖于编程语言的异常处理方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/263196

相关文章

最详细安装 PostgreSQL方法及常见问题解决

《最详细安装PostgreSQL方法及常见问题解决》:本文主要介绍最详细安装PostgreSQL方法及常见问题解决,介绍了在Windows系统上安装PostgreSQL及Linux系统上安装Po... 目录一、在 Windows 系统上安装 PostgreSQL1. 下载 PostgreSQL 安装包2.

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

SQL中redo log 刷⼊磁盘的常见方法

《SQL中redolog刷⼊磁盘的常见方法》本文主要介绍了SQL中redolog刷⼊磁盘的常见方法,将redolog刷入磁盘的方法确保了数据的持久性和一致性,下面就来具体介绍一下,感兴趣的可以了解... 目录Redo Log 刷入磁盘的方法Redo Log 刷入磁盘的过程代码示例(伪代码)在数据库系统中,r

Java Response返回值的最佳处理方案

《JavaResponse返回值的最佳处理方案》在开发Web应用程序时,我们经常需要通过HTTP请求从服务器获取响应数据,这些数据可以是JSON、XML、甚至是文件,本篇文章将详细解析Java中处理... 目录摘要概述核心问题:关键技术点:源码解析示例 1:使用HttpURLConnection获取Resp

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用

Java实现优雅日期处理的方案详解

《Java实现优雅日期处理的方案详解》在我们的日常工作中,需要经常处理各种格式,各种类似的的日期或者时间,下面我们就来看看如何使用java处理这样的日期问题吧,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言一、日期的坑1.1 日期格式化陷阱1.2 时区转换二、优雅方案的进阶之路2.1 线程安全重构2

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

html5的响应式布局的方法示例详解

《html5的响应式布局的方法示例详解》:本文主要介绍了HTML5中使用媒体查询和Flexbox进行响应式布局的方法,简要介绍了CSSGrid布局的基础知识和如何实现自动换行的网格布局,详细内容请阅读本文,希望能对你有所帮助... 一 使用媒体查询响应式布局        使用的参数@media这是常用的