C# 关于异常处理 try-catch语句的使用
在实际应用中,比如涉及文件读写、网络通信时,会因为文件不存在、权限不够、网络异常等原因引发异常,或者对数据库连接、查询、更新等操作,会因为连接超时、语法错误、唯一约束冲突等引发异常。
看过去的代码,当进行上面的这些操作,大家就通常会发现try-catch语句的身影。
不错。在这些情况下我们就可以应用try-catch语句来捕捉异常了。
1、基本语法:
try
{// 可能会引发异常的代码
}
catch (ExceptionType1 ex1)
{// 处理ExceptionType1类型的异常
}
catch (ExceptionType2 ex2)
{// 处理ExceptionType2类型的异常
}
finally
{// 可选的finally块,无论是否发生异常都会执行
}
这就是它的完整语法。try放置你的处理代码,当发生异常时,就执行cath语句块,假如有finally语句块,即使发生异常也执行。
2、常见用法:
1、捕捉特定异常:
try
{int[] numbers = { 1, 2, 3 ,4 };Console.WriteLine(numbers[5]); // 数组越界异常
}
catch (IndexOutOfRangeException ex)
{Console.WriteLine("发生了数组越界异常:" + ex.Message);
}
- 具体特定的异常常见的有:
| DivideByZeroException | 当在代码中进行除法运算时,如果除数为零,将引发此异常。 |
| IndexOutOfRangeException | 索引超出范围的异常,当尝试访问数组或集合中不存在的索引位置时,将引发此异常。 |
| FileNotFoundException | 文件未找到的异常,当尝试打开或操作不存在的文件时,将引发此异常。 |
| IOException | 输入/输出操作异常,用于捕获各种与输入/输出相关的异常,如文件操作、网络通信等。 |
| SqlException | 与数据库操作相关的异常,在进行数据库连接、查询、更新等操作时可能会引发此异常。 |
| FormatException | 格式化异常,当尝试将字符串转换为其他类型时,如果字符串的格式不符合要求,将引发此异常。 |
| ArgumentNullException | 参数为空异常,当传递给方法或函数的参数为null时,将引发此异常。 |
| InvalidOperationException | 无效操作异常,当进行了不符合当前对象状态或上下文的操作时,将引发此异常。 |
| NotSupportedException | 不支持的操作异常,当尝试执行不受支持的操作时,将引发此异常。 |
| UnauthorizedAccessException | 未授权访问异常,当尝试访问未授权的资源或执行未授权的操作时,将引发此异常。 |
2、处理多个异常类型:
try
{int result = Divide(10, 0); // 除以0的异常Console.WriteLine("结果:" + result);
}
catch (DivideByZeroException ex)
{Console.WriteLine("除以0异常:" + ex.Message);
}
catch (ArithmeticException ex)
{Console.WriteLine("算术异常:" + ex.Message);
}
3、使用finally块:
FileStream file = null;
try
{file = new FileStream("file.txt", FileMode.Open);// 使用文件流进行操作
}
catch (IOException ex)
{Console.WriteLine("发生了IO异常:" + ex.Message);
}
finally
{// 确保文件流被关闭file?.Close();
}
4、抛出异常:可参考:C#异常处理-throw语句-CSDN博客
5、使用异常过滤器:我们是可以使用when关键字进行异常筛选的。
try
{int result = Divide(10, 0);Console.WriteLine("结果:" + result);
}
catch (DivideByZeroException ex) when (ex.Message == "除数不能为0")
{Console.WriteLine("除以0异常:" + ex.Message);
}
catch (DivideByZeroException ex)
{Console.WriteLine("其他除以0异常:" + ex.Message);
}
相关文章:
C# 关于异常处理 try-catch语句的使用
在实际应用中,比如涉及文件读写、网络通信时,会因为文件不存在、权限不够、网络异常等原因引发异常,或者对数据库连接、查询、更新等操作,会因为连接超时、语法错误、唯一约束冲突等引发异常。 看过去的代码,当进行上…...
【LeeCode】26.删除有序数组中的重复项
给你一个 非严格递增排列 的数组 nums ,请你原地删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k ,你需…...
4-Docker命令之docker create
1.docker create介绍 docker create命令是用于创建一个新的容器,等价于docker run -d命令,但是与docker run -d不同的是,docker create创建的容器并未实际启动,需要指定docker start命令启动。 2.docker create用法 docker create [参数] [root@centos79 ~]# docker cr…...
leetcode每日一题33
86.分隔链表 因为对链表中的一个节点进行更换位置的操作需要知道该节点的上一个节点 所以建立一个虚拟头节点 ListNode* pnew ListNode(-201,head);根据题意,我们需要找到第一个大于x或等于x的节点large 并且将第一个大于或等于x的节点large后的所有小于x的节点都…...
性能测试【一】:Jmeter的常用操作
性能测试【一】:Jmeter的常用操作 一、使用命令行方式运行Jmeter1、为什么2、怎么用3、示例4、结果文件 二、生成动态报告1、准备2、命令3、报告示例4、报告释义 三、使用问题汇总 推荐使用命令行运行,GUI方式会经常卡死,尤其跑稳定性 一、使…...
【JAVA】SpringBoot + mongodb 分页、排序、动态多条件查询及事务处理
【JAVA】SpringBoot mongodb 分页、排序、动态多条件查询及事务处理 1.引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- mongodb ↓ -->&…...
nrm安装及使用
一、介绍 nrm 是一个 Node.js 的 registry 管理工具,它允许你快速地在不同的 npm registry 之间进行切换。通过使用 nrm,你可以方便地将 npm 的 registry 切换为淘宝镜像、npm 官方镜像或者其他定制的镜像,以加快包的下载速度。nrm仓库请点击…...
docker报错standard init linux.go:228 exec user process caused: exec format error
1、报错 使用Dockerfile自己做的服务镜像,docker run时启动失败,报错如下: standard init linux.go:228 exec user process caused: exec format error2、原因一 当前服务器的CPU架构和构建镜像时的CPU架构不兼容。比如做镜像是在arm机器下…...
Docker 的基本概念和优势,以及在应用程序开发中的实际应用。
Docker 是一种容器化技术,它将一个应用程序及其所有依赖项打包在一起,形成一个独立的、可移植的容器。这个容器可以在任何支持 Docker 的操作系统上运行,而且具有很好的可移植性和可扩展性。以下是 Docker 的基本概念和优势: 镜像…...
libmosquitto库的一个bug,任务消息id(mid)分配后不起作用
代码如图所示: 当订阅了所有主题后,每个主题的mid是他们的下标索引加100的数字,可是实际打印出来的值是: mid依然是1,2,这个参数在这里失效了,不知道是bug还是mqtt的什么机制?...
亚马逊云科技re:Invent大会:云计算与生成式AI共筑科技新局面,携手构建未来
随着科技的飞速发展,云计算和生成式 AI 已经成为了推动科技进步的重要力量。这两者相互结合,正在为我们创造一个全新的科技局面。 亚马逊云科技的re:Invent大会再次证明了云计算和生成式AI的强大结合正在塑造科技的新未来。这次大会聚焦了云计算的前沿技…...
Docker 部署 Nacos(单机),利用 MySQL 数据库存储配置信息
前面的话 默认你已经懂 Docker、docker-compose Nacos版本:v2.2.3 MySQL 版本:8.2.0 一、下载 打开 Nacos 官网 官网地址:官网 点击手册 左侧 Nacos Docker 克隆项目到本地 # 克隆项目,如果提示连接不到 github 请自行解决 …...
【LeeCode】35.搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 解: class Solution {public int searchInsert(int[] nums, int target) {int …...
18.天气小案例
1►新增带Layout组件的页面 直接在views文件夹下面新增weather.vue。然后随便写一个123,现在先让我们页面能跳过去先。 让页面能跳过去,有好几种方法: 1、在菜单管理自己添加一个菜单,然后把菜单分配给某个角色,再把…...
医保线上购药系统:代码驱动的医疗创新
医保线上购药系统,这是一个融合技术和医疗的创新典范。本文将通过简单的技术代码示例,为您揭示这一系统是如何通过技术驱动医疗创新,为用户提供更智能、便捷的健康管理体验的。 1. 前端界面开发 使用React框架,我们可以轻松构建…...
VMware OpenSLP漏洞解决方案
PS:早期为客户做VMware检测的方法,大家如有遇到可参考 OpenSLP堆溢出漏洞攻击大量ESXI服务器,该漏洞编号为CVE-2021-21974,由 OpenSLP 服务中的堆溢出问题引起 大于以下版本则不受影响 ESXi versions 7.x prior to ESXi7…...
UEditor编辑器实现上传图片自动加水印功能PHP源码
UEditor编辑器是百度旗下的免费开源富文本编辑器,使用很方便,但是也有缺点,比如,上传图片不能自动添加水印,下边我们就来说说如何在UEditor编辑器中自动实现上传图片添加水印功能,操作很简单。 首先找到UEditor/PHP目录下的Uploader.class.php的文件,打开该文件,找到以…...
【从浅识到熟知Linux】基本指定之find、grep、head和tail
🎈归属专栏:从浅学到熟知Linux 🚗个人主页:Jammingpro 🐟每日一句:一篇又一篇,学写越上头。 文章前言:本文介绍find、grep、head和tail指令用法并给出示例和截图。 文章目录 find基本…...
【云备份】文件操作实用工具类设计
文章目录 为什么要单独设计文件工具类?整体实现Filesize ——文件大小stat接口 LastMTime ——最后一次修改时间LastATime —— 最后一次访问时间FileName —— 文件名称GetPostLen ——获取文件指定位置 指定长度的数据GetContnet —— 读取文件数据SetContent ——…...
LeetCode Hot100 199.二叉树的右视图
题目: 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 方法(灵神):先递归右子树,再递归左子树,在递归的同…...
MQ2/MQ7传感器PPM转换公式详解:从原理到代码实现(含校准指南)
MQ2/MQ7传感器PPM转换公式详解:从原理到代码实现(含校准指南) 在智能家居和工业监测领域,气体传感器的精准度直接决定了整个系统的可靠性。MQ系列传感器因其成本优势和广泛适用性,成为众多开发者的首选。但很多初学者在…...
TI C2000 DSP2837xD双核开发避坑指南:手把手配置IPC通信与共享内存
DSP2837xD双核开发实战:从零构建稳定IPC通信系统的关键技巧 第一次接触TI C2000双核DSP时,面对2837xD芯片的IPC通信配置,大多数工程师都会经历从兴奋到困惑再到豁然开朗的过程。作为实时控制领域的核心处理器,DSP2837xD凭借其双C…...
HarmonyOS 状态管理进阶:@ComponentV2 与 ArkTS 装饰器实战解析
1. 理解 ComponentV2 与 ArkTS 装饰器的核心价值 在 HarmonyOS 应用开发中,状态管理一直是决定应用质量的关键因素。传统的 Component 装饰器配合 V1 状态管理方案虽然成熟,但随着应用复杂度提升,开发者们逐渐遇到了状态传递繁琐、深层嵌套观…...
AtCoder Beginner Contest 438
【小羊肖恩】Atcoder Beginner Contest 438 实录——上次 AK 还在上 次,G 前后掉了 8 名!还是不太会写环上的东西…… https://www.bilibili.com/video/BV1teBCBYER9/ AtCoder Beginner Contest 438 https://www.bilibili.com/video/BV1a8BCBKEnX/ https…...
5篇2章12节:诊断试验准确性研究与多阈值Meta分析方法(下篇:可视计算)
多阈值 Meta 分析通过整合全阈值范围内的诊断效能数据,为临床实践提供更全面的证据支持,但数据转换的复杂性与结果可视化的直观性一直是技术痛点。本文作为诊断试验准确性研究系列下篇,接着全面讲解可视化绘图和诊断统计量计算 。 一、plot () 函数 diagmeta包的plot()函数…...
动手学深度学习——注意力机制代码
1. 前言上一篇我们已经从思想上理解了注意力机制:基础 Seq2Seq 的问题在于固定长度上下文向量解码器在不同时间步,其实应该关注输入序列的不同位置注意力机制的本质,就是对输入表示做加权和权重由当前位置和各输入位置的相关性决定这一篇就继…...
用Python和sklearn搞定百度慧眼数据:从抓包到坐标转换的完整实战
Python实战:百度慧眼数据爬取与坐标转换全流程解析 当我们需要分析城市人流分布时,百度慧眼提供的热力图数据是个不错的选择。但直接从API获取的数据往往需要经过一系列处理才能用于分析。本文将带你完整走通从数据获取到坐标转换的整个流程,…...
构建可视化监控体系实现ANSYS许可证可观测管理
许可闲置?天价软件费白花了!你是不单是也碰到过此问题?项目到了紧要关头,软件许可却偏偏成了拦路虎,要么抢不到,要么抢到了又用不了,心里那个急啊,不亚于等一台大功率服务器——卡在…...
从CLIP到FLAVA:图解多模态模型中的特征融合三阶段(附注意力机制详解)
从CLIP到FLAVA:图解多模态模型中的特征融合三阶段(附注意力机制详解) 在人工智能领域,多模态学习正经历着前所未有的发展浪潮。想象一下,当计算机不仅能看懂图片中的内容,还能理解与之相关的文字描述&#…...
手把手教你用Postman模拟微信支付V3回调,再也不怕IllegalArgumentException了
实战指南:用Postman精准模拟微信支付V3回调全流程 微信支付V3的回调验签机制是保障交易安全的重要环节,但在开发调试阶段,如何高效模拟回调请求并验证签名有效性,成为许多开发者面临的挑战。本文将带您从零开始,通过Po…...
