Python程序中的异常处理解决方法

如何在Python程序中抛出异常,又不影响正常程序运行

在Python中,可以使用try...except...语句捕获异常。如果我们在程序中遇到了异常情况,可以使用raise语句主动抛出异常,从而触发try...except...块中的异常处理逻辑。如果我们希望抛出异常时不影响程序的正常运行,可以在异常处理块中添加一些代码来处理或忽略异常。

下面是一个简单的示例,演示了如何在Python中抛出异常并不影响程序的正常运行:

def divide(a, b):try:# 尝试计算 a/b 的值result = a / bexcept ZeroDivisionError:# 如果 b 为 0,抛出异常raise ValueError("Cannot divide by zero.")else:# 如果计算成功,返回计算结果return resultif __name__ == '__main__':nums = [(10, 2), (5, 0), (8, 4)]for a, b in nums:try:result = divide(a, b)except ValueError as e:# 捕获异常并打印错误信息,但不会影响程序的正常运行print(f"Error: {e}")else:print(f"{a}/{b} = {result}")

在上面的示例中,我们定义了一个名为divide的函数,它接受两个参数 a 和 b,并尝试计算 a/b 的值。如果 b 为 0,程序会抛出ValueError异常。

在程序的主逻辑中,我们使用一个循环遍历一个包含多个数字对的列表,并依次调用divide函数计算它们的商。如果在计算过程中出现异常,程序会捕获并打印错误信息,但不会影响后续的计算和程序的正常运行。

需要注意的是,在实际开发中,我们应该根据具体的业务需求和异常类型,合理地处理或忽略异常,避免对程序的稳定性和安全性造成影响。

自定义异常类型在实际应用中的用法和好处

假设我们正在编写一个学生信息管理系统,其中需要处理各种类型的异常,例如输入无效、文件读写错误、数据库连接失败等。我们可以定义多个自定义异常类型来表示不同类型的异常,并在程序中使用 try-except 块捕获并处理异常。以下是一个示例代码:

import csv
import sqlite3
from datetime import datetime# 自定义异常类型:无效输入异常
class InvalidInputException(Exception):def __init__(self, message):self.message = message# 自定义异常类型:文件读写异常
class FileIOException(Exception):def __init__(self, filename, mode):self.filename = filenameself.mode = mode# 自定义异常类型:数据库连接异常
class DBConnectionException(Exception):def __init__(self, message):self.message = message# 从 CSV 文件中读取学生信息
def read_student_info_from_csv(filename):try:with open(filename, "r") as f:reader = csv.reader(f)student_info_list = []for row in reader:if len(row) != 3:raise InvalidInputException("无效输入:行格式不正确")student_info_list.append(row)return student_info_listexcept FileNotFoundError:raise FileIOException(filename, "r")# 将学生信息保存到 SQLite 数据库中
def save_student_info_to_db(dbname, student_info):try:conn = sqlite3.connect(dbname)c = conn.cursor()c.execute("CREATE TABLE IF NOT EXISTS students (id INTEGER PRIMARY KEY, name TEXT, gender TEXT, birthday TEXT)")c.executemany("INSERT INTO students(name, gender, birthday) values (?, ?, ?)", student_info)conn.commit()conn.close()except sqlite3.Error as e:raise DBConnectionException("数据库连接异常:{}".format(str(e)))# 主函数
def main():try:student_info_list = read_student_info_from_csv("student_info.csv")save_student_info_to_db("student_info.db", student_info_list)print("学生信息保存成功!")except InvalidInputException as e:print("无效输入异常:{}".format(e.message))except FileIOException as e:print("文件读写异常:无法打开文件 {},模式为 {}".format(e.filename, e.mode))except DBConnectionException as e:print(e.message)if __name__ == "__main__":main()

在上述代码中,我们定义了三个自定义异常类型 InvalidInputExceptionFileIOExceptionDBConnectionException,用于表示不同类型的异常。

在函数 read_student_info_from_csv 中,我们尝试从 CSV 文件中读取学生信息。如果读取过程中发现行格式不正确,则抛出 InvalidInputException 异常;如果文件不存在,则抛出 FileIOException 异常。

在函数 save_student_info_to_db 中,我们将读取到的学生信息保存到 SQLite 数据库中。如果连接数据库时出现异常,则抛出 DBConnectionException 异常。

在主函数中,我们使用 try-except 块捕获并处理不同类型的异常,以便更好地处理错误情况并提供有用的信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/609172.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【驱动序列】C#获取电脑硬件之CPU信息,以及它都有那些品牌

欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是是《驱动序列》文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识…

MFC模拟消息发送,自定义以及系统消息

在MFC框架下,有很多系统已经定义好的消息,例如ON_WM_LBUTTONDOWN()、ON_WM_MBUTTONDOWN()等等。我们在使用的时候只需要声明并调用就可以了,最简单的用法。 提升了一点难度的用法就是自己设置自定义消息,再提升一点难度的就是如何…

DAY2-English Learning

一、积累 1.trunk 案例: i put my luggage in the trunk of the car. 翻译:我把行李放在汽车的后备箱里。 2. solvent 例句:The sovlent is uesd to dissolve the paint. 翻译:溶剂是用来溶解油漆的。 3. 受伤的表达 1.cramp …

人工智能_机器学习091_使用三维瑞士卷数据_KMeans聚类算法进行瑞士卷数据聚类---人工智能工作笔记0131

然后我们首先来构建一下数据 准备瑞士卷数据: import numpy as np 导入数学计算包 import matplotlib.pyplot as plt 导入画图包 #自底向上聚类 from sklearn.cluster import AgglceerativeClustering 导入分层聚类模型 from sklearn.datasets import make_swiss_roll # 瑞士卷…

谷粒商城项目|微服务架构的一些与思考解决跨域问题

1.微服务架构的组成每部分的作用 2.还有其他的微服务架构模式吗 3.微服务服务交互的方式 1)grpc 2)rest api 4.微服务网关与API网关? 5.注册中心比较(Nacos与Eureka) Nacos Nacos 是阿里巴巴开源的项目,N…

【AI】AI和点云(2/2)

目录 五、点云的压缩 六、点云的体素化序列 七、点云增强 八、深度学习和点云 (接上回) 【AI】AI和点云(1/2)-CSDN博客 五、点云的压缩 点云压缩是点云处理中的一项重要技术,主要用于减少点云数据的存储空间和传…

【Python学习】Python学习9-字符串

目录 【Python学习】Python学习9-字符串 前言创建语法访问字符串的值字符串拼接Python 转义字符Python字符串运算符Python格式化字符串Python 三引号Unicode字符串Python 的字符串内建函数参考 文章所属专区 Python学习 前言 本章节主要说明Python的字符串类型。 创建语法 …

面试题总结(1.8)

1.详细解释JavaScript中的事件循环机制(Event Loop)是如何工作的,包括宏任务和微任务的执行顺序。 JavaScript的事件循环机制(Event Loop)是一种用于处理异步操作的执行模型。它允许 JavaScript 在单线程环境中处理多个…

SQL基础知识2

select语句 1、where语句 具体的在 SQL基础知识1 2、集函数 餐厅订单案例 where后面用集函数会导致无效/错误,原因在3.1 3、group by、having 继上面的餐厅案例 案例:用两个条件分组 1、having和where的区别 2、总值计算 (汇总&#x…

Mysql高可用|索引|事务 | 调优

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 chatgpt体验地址 文章目录 前言sql语句的执行顺序关键词连接名字解释sql语句 面试坑点存储引擎MYSQL存储引擎 SQL优化索引索引失效索引的数据结构面试坑点 锁事务四大特性事务的隔离级别M…

创建一个矩形中有两个三角形

#include <glad/glad.h> #include <GLFW/glfw3.h>#include <iostream>float vertices[] {// 第一个三角形0.5f, 0.5f, 0.0f, // 右上0.5f, -0.5f, 0.0f, // 右下-0.5f, -0.5f, 0.0f, // 左下-0.5f, 0.5f, 0.0f, // 左上 };unsigned i…

vue3中路由守卫的快速上手

路由守卫或者说路由拦截&#xff0c;在我们实际开发前端项目中是经常用到的操作&#xff1b; 通过路由守卫&#xff0c;可以在用户访问某个路由之前进行权限验证。&#xff08;全局前置守卫&#xff09;例如&#xff0c;可以检查用户是否登录&#xff0c;是否具有访问该路由的…

P1025 [NOIP2001 提高组] 数的划分———C++(动态规划、DFS)

目录 [NOIP2001 提高组] 数的划分题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 动态规划的解题思路Code运行结果DFSCode运行结果 [NOIP2001 提高组] 数的划分 题目描述 将整数 n n n 分成 k k k 份&#xff0c;且每份不能为空&#xff0c;任意两个方案不相…

FCRP第一题详解一

先看效果&#xff1a; 20240106-094943 看他的第一要求&#xff1a; 1.整个模板只能出现一个数据集&#xff0c;下拉复选框与报表主体共用一个数据集&#xff0c;且不影响互相显示。 所以这里不能通过SQL语句来过滤&#xff0c;SQL语句中中只能全部查询出来&#xff0c;这样保…

Linux———head,tail命令详解(狠狠爱住)

目录 head 命令&#xff1a; head 命令基本语法&#xff1a; 常用选项 示例 显示文件的前 10 行&#xff1a; 显示文件的前 5 行&#xff1a; 显示文件的前 100 个字节&#xff1a; 不显示文件名的标题信息&#xff1a; 显示文件名的标题信息&#xff1a; tail 命令&…

基于JAVA+SpringBoot的咖啡商城

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着互联网的普及和发…

Transformer从菜鸟到新手(五)

引言 上篇文章我们在单卡上完成了完整的训练过程。 从本文开始介绍模型训练/推理上的一些优化技巧&#xff0c;本文主要介绍多卡并行训练。 下篇文章将介绍大模型推理常用的缓存技术。 多卡训练 第一个要介绍的是利用多GPU优化&#xff0c;因为在单卡上训练实在是太慢。这…

11.23 校招 实习 内推 面经

绿*泡*泡&#xff1a; neituijunsir 交流裙 &#xff0c;内推/实习/校招汇总表格 1、校招&社招&实习丨图森未来传感器标定工程师招聘&#xff08;内推&#xff09; 校招&社招&实习丨图森未来传感器标定工程师招聘&#xff08;内推&#xff09; 2、校招 | 吉…

java开发中如何使用定时任务

定时任务概述&#xff1a; 任务调度&#xff1a; 是指系统为了自动完成特定任务&#xff0c;在约定的特定时刻执行任务的过程。有了任务调度&#xff0c;即可解放更多的人力&#xff0c;而是由系统自动去执行任务。 常用业务场景案例&#xff1a; 某电商系统需要在每天上午10点…

利用“与非”运算实现布尔代数中的与,或,非三种运算

什么是“与非”运算&#xff1f; 要想明白“与非”运算&#xff0c;首先要明白“与”运算和“非”运算。 “与”运算在离散数学中叫做合取式&#xff0c;也就是A和B相同时为1的时候结果才为1&#xff0c;其余情况都为0 下面是“与”运算的真值表 “非”运算在离散数学中叫做否…