当前位置: 首页 > news >正文

python基础篇(8):异常处理

在Python编程中,异常是程序运行时发生的错误,它会中断程序的正常执行流程。异常处理机制使得程序能够捕获这些错误,并进行适当的处理,从而避免程序崩溃。

1 错误类型

代码的错误一般会有语法错误和异常错误两种,语法错误就是代码没有按照 Python 规定语法去写导致程序无法执行,比如代码的格式、缩进等。另外一种是异常错误,即使语法正确,程序在运行过程中也可能会出错,比如用户输入了错误的内容,列表的索引不存在,字典的key不存在等等。

使用异常处理可以在异常错误的时候,执行特定的逻辑,让程序可以继续执行,如果不对异常捕获,程序将终止执行。

异常的分类

(1)内置异常类

  • zeroDivisionError:除(或取模)零
  • IndexError:序列中没有此索引(index)
  • KeyError:映射中没有这个键
  • SyntaxError:Python 语法错误
  • OSError:操作系统异常(如:文件打开异常)
  • keyboardInterrupt:键盘中断错误,Ctrl+c使得程序异常退出
  • RuntimeError:运行时错误
  • Exception:所有异常的父类

(2)自定义异常类

可以通过自定义类,继承 Exception 实现。

2 捕获异常

2.1 捕获常规异常

try:可能发生错误的代码
except:如果出现异常执行的代码

示例如下:

需求:尝试以`r`模式打开文件,如果文件不存在,则以`w`方式打开。

try:f = open('linux.txt', 'r')
except:f = open('linux.txt', 'w')

2.2 捕获指定异常

try:print(name)
except NameError as e:print('name变量名称未定义错误')

注意事项:

  • 如果尝试执行的代码的异常类型和要捕获的异常类型不一致,则无法捕获异常。
  • 一般try下方只放一行尝试执行的代码。

2.3 捕获多个异常

当捕获多个异常时,可以把要捕获的异常类型的名字,放到except 后,并使用元组的方式进行书写。

try:print(1/0)
except (NameError, ZeroDivisionError) as e:print(e)

结果如下:

也可以使用带有分支的异常处理,如下:

try:# 可能会引发异常的代码print(1/0)
except ValueError as ve:# 处理ValueError的代码print(f"ValueError occurred: {ve}")
except ZeroDivisionError as ze:# 处理ValueError的代码print(f"ZeroDivisionError occurred: {ze}")
except TypeError as te:# 处理TypeError的代码print(f"TypeError occurred: {te}")
except Exception as e:# 处理其他所有类型的异常print(f"An error occurred: {e}")

结果如下:

2.4 捕获所有异常

try:print(name)
except Exception as e:print(e)

结果如下:

2.5 捕获else分支

还可以使用 else 和 finally 子句。

  • else:当try块中的代码没有引发异常时,执行else块的代码。
  • finally:无论是否发生异常,finally块的代码总会执行。
try:f = open('test.txt', 'r')
except Exception as e:f = open('test.txt', 'w')
else:print('没有异常,真开心')
finally:f.close()

3 抛出异常

在Python中,可以使用 raise 关键字手动抛出异常。

def divide(x, y):if y == 0:raise ValueError("y cannot be zero")return x / ydivide(4, 2)
divide(3, 0)

结果如下:

可以在函数或代码块中根据需要抛出特定类型的异常,以便在其他地方进行捕获和处理。

4 自定义异常

有时标准异常不足以描述特定的错误情况,可以通过创建自定义异常类来定义新的异常类型

class CustomError(Exception):"""自定义异常类"""def __init__(self, message):self.message = messagedef __str__(self):return f"CustomError: {self.message}"# 使用自定义异常
try:raise CustomError("This is a custom error")
except CustomError as ce:print(ce)

结果如下:

5 异常传递

当一个异常在函数中未被处理时,该异常会向上传递到调用该函数的地方,直到被捕获或到达程序的顶层,从而导致程序崩溃。

  • read_file函数试图打开一个文件,如果文件不存在,会捕获FileNotFoundError并抛出一个自定义的CustomError。
  • process_file函数调用read_file并尝试处理文件内容,如果发生CustomError,会捕获并重新抛出。
  • 最外层的try...except语句最终捕获并处理CustomError,输出错误信息。
class CustomError(Exception):"""自定义异常类"""def __init__(self, message):self.message = messagedef __str__(self):return f"CustomError: {self.message}"def read_file(file_path):try:with open(file_path, 'r') as file:return file.read()except FileNotFoundError as e:raise CustomError(f"File not found: {file_path}") from edef process_file(file_path):try:content = read_file(file_path)# 假设这里有其他处理文件内容的代码return contentexcept CustomError as ce:print(ce)raisetry:file_content = process_file("non_existent_file.txt")
except CustomError as ce:print(f"Handled at top level: {ce}")

结果如下:

相关文章:

python基础篇(8):异常处理

在Python编程中,异常是程序运行时发生的错误,它会中断程序的正常执行流程。异常处理机制使得程序能够捕获这些错误,并进行适当的处理,从而避免程序崩溃。 1 错误类型 代码的错误一般会有语法错误和异常错误两种,语法错…...

FortiClient 用IPsec VPN 远程拨号到FortiGate说明文档

说明:本文档针对IPsec VPN 中的Remote VPN 进行说明,即远程用户使用PC中的FortiClient软件,通过VPN拨号的方式连接到公司总部FortiGate设备,访问公司内部服务器。在配置之前需要统一VPN策略和参数,如模式… 说明&#…...

Git-Unity项目版本管理

目录 准备GitHub新建项目并添加ssh密钥Unity文件夹 本文记录如何用git对unity 项目进行版本管理,并可传至GitHub远端。 准备 名称版本windows11Unity2202.3.9.f1gitN.A.githubN.A. GitHub新建项目并添加ssh密钥 GitHub新建一个repositorywindows11 生成ssh-key&…...

每日一题~ leetcode 402 (贪心+单调栈)

click me! 这个贪心的推导在leetcode上已经很明确了。 click me! 删除k个数,可以先考虑删除一个数。这也是一种常见的思路。(如果进行同样的操作多次,可以先只 考虑一次操作如何实现,或者他的影响。完成这一次操作后,…...

设计模式之模版方法

模版方法介绍 模版方法(Template Method)模式是一种行为型设计模式,它定义了一个操作(模板方法)的基本组合与控制流程,将一些步骤(抽象方法)推迟到子类中,使得子类可以在…...

docker部署redis/mongodb/

一、redis 创建/root/redis/conf/redis.conf 全部执行命令如下 docker run -it -d --name redis -p 6379:6379 --net mynet --ip 172.18.0.9 -m 400m -v /root/redis/conf:/usr/local/etc/redis -e TXAsia/Shangehai redis redis-server /usr/local/etc/redis/redis.conf 部署…...

LeetCode 581. 最短无序连续子数组

更多题解尽在 https://sugar.matrixlab.dev/algorithm 每日更新。 组队打卡,更多解法等你一起来参与哦! LeetCode 581. 最短无序连续子数组,难度中等。 排序 解题思路:首先对数组排序,然后找出两侧顺序的数组&#x…...

数据库可视化管理工具dbeaver试用及问题处理。

本文记录了在内网离线安装数据库可视化管理工具dbeaver的过程和相关问题处理方法。 一、下载dbeaver https://dbeaver.io/download/ 笔者测试时Windows平台最新版本为:dbeaver-ce-24.1.1-x86_64-setup.exe 二、安装方法 一路“下一步”即可 三、问题处理 1、问…...

29、php实现和为S的两个数字(含源码)

题目:php 实现 和为S的两个数字 描述: 输入一个递增排序的数组和一个数字S,在数组中查找两个数, 是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 输出描述: 对应每个测…...

Spring Boot中的全局异常处理

Spring Boot中的全局异常处理 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何在Spring Boot应用中实现全局异常处理,这是保证应用…...

中英双语介绍美国苹果公司(Apple Inc.)

中文版 苹果公司简介 苹果公司(Apple Inc.)是一家美国跨国科技公司,总部位于加利福尼亚州库比蒂诺。作为全球最有影响力的科技公司之一,苹果以其创新的产品和设计引领了多个科技领域的变革。以下是对苹果公司发展历史、主要产品…...

C语言牢大坠机

目录 开头程序程序的流程图《牢大坠机》结尾 开头 大家好&#xff0c;我叫这是我58&#xff0c;今天&#xff0c;我们要来看关于牢大坠机的一些东西。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #define HIGH 66 #include <stdio.h> #include <Windows.h> int ma…...

zdppy+vue3+antd 实现表格单元格编辑功能

初步实现 <template><a-button class"editable-add-btn" style"margin-bottom: 8px" click"handleAdd">Add</a-button><a-table bordered :data-source"dataSource" :columns"columns"><templa…...

elasticsearch索引怎么设计

Primary Shard&#xff08;主分片&#xff09; Primary Shard&#xff08;主分片&#xff09;是索引数据存储的基本单位&#xff0c;承担着数据写入和查询的职责。以下是关于Primary Shard的一些关键点&#xff1a; 1. 数据分布&#xff1a;每个索引在创建时会被分成多个主分…...

React 中 useState 和 useReducer 的联系和区别

文章目录 使用场景使用 useState使用 useReducer 联系区别用法状态更新逻辑适用场景可读性和可维护性 使用场景 使用 useState 状态逻辑简单。只涉及少量的状态更新。需要快速和简单的状态管理。 使用 useReducer 状态逻辑复杂。涉及多个子状态或多种状态更新逻辑。需要更好…...

Linux 定时任务详解:全面掌握 cron 和 at 命令

Linux 定时任务详解&#xff1a;全面掌握 cron 和 at 命令 Linux 系统中定时任务的管理对于运维和开发人员来说都是至关重要的。通过定时任务&#xff0c;可以在特定时间自动执行脚本或命令&#xff0c;提高系统自动化程度。本文将详细介绍 Linux 中常用的定时任务管理工具 cr…...

力扣考研经典题 反转链表

核心思想 头插法&#xff1a; 不断的将cur指针所指向的节点放到头节点之前&#xff0c;然后头节点指向cur节点&#xff0c;因为最后返回的是head.next 。 解题思路 1.如果头节点是空的&#xff0c;或者是只有一个节点&#xff0c;只需要返回head节点即可。 if (head null …...

opencv 设置超时时间

经常爬视频数据&#xff0c;然后用opencv做成图片 因此设置超时时间很重要 cap.set(cv2.CAP_PROP_FPS, timeout_ms) for idx, row in data.iterrows(): if idx < 400: continue try: # 打开视频文件 timeout_ms 5000 cap cv2.VideoCapture(row[PLAY_URL]) cap.set(cv2.C…...

2024年7月6日随笔

期末考试全部结束了&#xff0c;这个月是真累啊&#xff0c;一堆事&#xff0c;好在都熬过来了&#xff0c;上次参加的那个码题杯自己居然进国赛了&#xff0c;我看了一下职业赛道和本科赛道的题&#xff0c;本科赛道的感觉要难上不少&#xff0c;比赛时间是一周后&#xff0c;…...

Ubuntu 打开或关闭界面

设置开机默认关闭图形界面 1. 设置系统默认启动到多用户目标&#xff08;命令行界面&#xff09;&#xff1a; o 使用以下命令将系统默认启动目标设置为多用户目标&#xff08;这会关闭图形界面&#xff09;&#xff1a; sudo systemctl set-default multi-use…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...