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

python学习之异常

在编程中,异常是指程序运行时发生的错误或异常情况,它们可能会打断程序的正常流程。不同的编程语言定义了自己的一套异常类型。在Python中,异常是基于类和对象的,所有的异常都继承自内置的`BaseException`类。

以下是Python中一些常见的异常类型:

1. **`BaseException`**:所有异常的基类,很少直接使用。

2. **`SystemExit`**:当`sys.exit()`被调用时引发,用于程序退出。

3. **`KeyboardInterrupt`**:当用户按下中断信号(通常是Ctrl+C)时引发。

4. **`GeneratorExit`**:当需要终止一个生成器时引发。

5. **`Exception`**:大多数内置的、非系统退出类的异常都继承自`Exception`。

6. **`ArithmeticError`**:算术错误,如除以零。

   - **`OverflowError`**:数值运算超出最大限制。
   - **`ZeroDivisionError`**:除以零。

7. **`AssertionError`**:断言失败时引发。

8. **`AttributeError`**:尝试访问对象不存在的属性时引发。

9. **`BufferError`**:与缓冲区相关的操作失败时引发。

10. **`EOFError`**:输入迭代器在到达文件结尾之前没有提供应提供的输入。

11. **`ImportError`**:导入模块失败时引发。

12. **`IndexError`**:序列中没有更多的元素时尝试索引引发。

13. **`KeyError`**:字典中不存在指定的键时引发。

14. **`LookupError`**:索引或键在序列中未找到时引发。

    - **`IndexError`**:序列中没有更多的元素。
    - **`KeyError`**:字典中不存在指定的键。

15. **`MemoryError`**:内存不足时引发。

16. **`NameError`**:尝试访问未定义的变量时引发。

17. **`OSError`**:操作系统相关的错误。

    - **`BlockingIOError`**:I/O操作阻塞。
    - **`ChildProcessError`**:子进程异常终止。
    - **`ConnectionError`**:网络连接错误。
    - **`FileNotFoundError`**:文件未找到。
    - **`InterruptedError`**:系统调用被中断。
    - **`PermissionError`**:权限不足。
    - **`ProcessLookupError`**:进程未找到。
    - **`TimeoutError`**:操作超时。

18. **`ReferenceError`**:弱引用试图访问已经垃圾回收的对象。

19. **`RuntimeError`**:一般的运行时错误。

20. **`StopIteration`**:迭代器没有更多的元素时引发。

21. **`SyntaxError`**:语法错误。

22. **`IndentationError`**:不正确的缩进。

23. **`TabError`**:混合使用空格和制表符进行缩进。

24. **`SystemError`**:系统相关的错误。

25. **`TypeError`**:操作或函数调用中类型错误。

26. **`ValueError`**:传递给函数的值有误。

27. **`UnicodeError`**:Unicode相关的错误。

28. **`Warning`**:警告的基类,不是异常,但用于发出警告。

每种异常都有一个明确的目的,用于指示程序中发生的具体错误类型。在Python中,你可以捕获并处理这些异常,以使程序更加健壮和用户友好。使用`try...except`语句可以捕获并处理异常,例如:

```python
try:
    # 尝试执行的代码
    result = 10 / 0
except ZeroDivisionError:
    # 处理除以零的错误
    print("Cannot divide by zero.")
```

了解并正确处理异常是编写可靠和健壮软件的关键部分。

异常处理是编程中的一种错误处理机制,它允许程序在发生错误时捕获并处理异常,而不是使整个程序崩溃。在Python中,异常处理是通过`try...except`语句来实现的。

以下是Python中异常处理的基本概念和用法:

### 1. `try` 块
`try`块包含了可能引发异常的代码。如果`try`块中的代码正常执行,那么其中的异常就不会被抛出。

```python
try:
    # 可能引发异常的代码
    result = 10 / 0
```

### 2. `except` 块
`except`块用于捕获并处理`try`块中抛出的异常。你可以为不同的异常类型定义不同的`except`块。

```python
except ZeroDivisionError:
    # 处理除以零的错误
    print("Cannot divide by zero.")
```

### 3. 捕获多个异常
你可以在一个`except`块中捕获多个异常类型,或者使用多个`except`块来分别处理不同类型的异常。

```python
except (ZeroDivisionError, TypeError) as e:
    # 处理除以零或类型错误
    print(f"An error occurred: {e}")
```

### 4. `else` 块
`else`块在`try`块没有抛出任何异常时执行。它可以用来放置那些不需要异常处理的代码。

```python
try:
    # 可能引发异常的代码
except SomeException:
    # 处理异常
else:
    # 没有异常发生时执行的代码
    print("No exceptions were raised.")
```

### 5. `finally` 块
`finally`块无论你是否捕获到异常都会执行,通常用于执行一些清理工作,如关闭文件或释放资源。

```python
try:
    # 尝试执行的代码
except SomeException:
    # 处理异常
finally:
    # 无论是否发生异常都会执行的代码
    print("This will always be executed.")
```

### 6. `raise` 关键字
`raise`关键字用于手动抛出一个指定的异常。

```python
if some_condition:
    raise ValueError("An error occurred due to some condition.")
```

### 7. 自定义异常
你可以定义自己的异常类来表示特定的错误情况。

```python
class MyCustomError(Exception):
    pass

try:
    # 某些条件满足时抛出自定义异常
    raise MyCustomError("Something went wrong!")
except MyCustomError as e:
    print(f"Caught an error: {e}")
```

### 8. 异常链
从Python 3开始,你可以在抛出新异常的同时,保留原始异常的信息。

```python
try:
    # 某些操作
except SomeException as e:
    raise AnotherException("New error message") from e
```

异常处理是编写健壮程序的关键,它允许你优雅地处理错误情况,而不是让程序在遇到问题时突然崩溃。通过合理使用`try...except...else...finally`语句,你可以控制程序的异常流程,并提供更好的用户体验。
 

相关文章:

python学习之异常

在编程中,异常是指程序运行时发生的错误或异常情况,它们可能会打断程序的正常流程。不同的编程语言定义了自己的一套异常类型。在Python中,异常是基于类和对象的,所有的异常都继承自内置的BaseException类。 以下是Python中一些常…...

多张图像实现全景无痕拼接操作

目录 ​编辑 1,图像拼接的作用 2,实现步骤 3,效果展示 1,图像拼接的作用 视觉扩展:通过拼接,可以将多个视角的图像合并,创造出比单张图片更广阔的视野。 数据整合:在科学研究和地…...

在阿里云ecs上构建一个WordPress博客网站

1、购买ECS 使用抢占式实例,RDS 使用按量付费 2、在安全组的出入方向添加80端口 3、购买一个公网IP绑定该ecs 4、云数据库rds选择按量付费 5、创建一个名为test_user的普通账号 6、创建数据库 7、设置RDS实例白名单 8、远程登录ecs实例 9、安装apache服务及其扩展包…...

安卓应用开发学习:查看手机传感器信息

一、引言 在手机app的开发中经常会用到手机的传感器,在《Android App 开发进阶与项目实战》一书的第10章就介绍了传感器的一些功能和用法。要想使用传感器,首先得知道手机具备哪些传感器。书中有传感器类型取值的说明,并提供了一个查看手机传…...

C语言字符串缺陷

目录 补缺: 正题开始: 思考: 解决方案: 1.string类 2.redis库 简介: 对于处理字符串的好处: 下期预告:内容待定 补缺: 在上期内容的结尾我留下了一个问题,这个问…...

分布式场景中的常见的技术问题及解决,如分布式锁、分布式事务、分布式 session、分布式任务调度

目录 一、分布式锁 二、分布式事务 三、分布式Session 四、分布式任务调度 在分布式场景中,常见的技术问题及其解决方案涉及多个方面,包括分布式锁、分布式事务、分布式session和分布式任务调度。以下是对这些问题的详细探讨: 一、分布式…...

Android笔试面试题AI答之Kotlin(9)

文章目录 39.Kotlin中List与MutableList的区别?ListMutableList使用场景示例 40. Kotlin中实现单例的几种常见方式?1. 懒汉式(线程不安全)2. 懒汉式(线程安全)3. 饿汉式4. 双重校验锁(DCL, Doub…...

C# 不一样的洗牌算法---Simd指令

洗牌算法&#xff0c;以随机打乱数组中元素的位置 测试数据创建 int[] _data; Random rng new Random(); protected override void CreateData() {_data new int[_size];for (int i 0; i < _data.Length; i){_data[i] i;} } 普通打乱数组元素位置 protected overrid…...

LVGL系列3--纯物理(外部)按键,数字键盘控制控件

LVGL系列 一、LVGL移植 LVGL系列1–AT32移植LVGL_V8具体步骤 LVGL系列2–linux lvglv8 vscode 移植 LVGL系列3–纯物理(外部)按键&#xff0c;数字键盘控制控件 文章目录 LVGL系列一、LVGL移植 一、背景方式一&#xff1a;自定义事件发送与处理函数方式二&#xff1a;利用l…...

FPGA开发——UART回环实现之接收模块的设计

一、简介 因为我们本次进行串口回环的实验的对象是FPGA开发板和PC端&#xff0c;所以在接收和发送模块中先编写接收模块&#xff0c;这样可以在后面更好的进行发送模块的验证。&#xff08;其实这里先编写哪个模块&#xff09;都不影响&#xff0c;这里看自己心情&#xff0c;反…...

Debezium系列之:记录一次SQLServer数据库数据不采集,恢复采集造成下游承压的情况,以及相对应的详细解决方案

Debezium系列之:记录一次SQLServer数据库数据不采集,恢复采集造成下游承压的情况,以及相对应的详细解决方案 一、背景二、查看CDC表情况三、 排查数据库是否开启代理四、排查表是否开启CDC五、下游承压情况六、解决方案一、背景 Connector状态正常,但几十台SQLServer数据库…...

Linux线程基础学习记录

0.线程特点 &#xff08;1&#xff09;.线程共享资源&#xff1a;一个进程下的多个线程共享以下资源 可执行的指令 静态数据 进程中打开的文件描述符 当前工作目录 用户ID 用户组ID &#xff08;2&#xff09;.线程私有资源&#xff1a; 线程ID PC(程序计数器&#xff09;和相…...

【Python学习-UI界面】PyQt5 小部件12-QStackedWidget 多页显示

功能和 QTabWidget 类似&#xff0c;它也有助于高效利用窗口的客户区域。 QStackedWidget 提供了一个窗口堆栈&#xff0c;每次只能查看一个窗口。它是建立在 QStackedLayout 之上的一个有用的布局。 样式如下: 右键可以变型为QTabWidget...

Mybatis中好用的元对象反射工具类 - MetaObject

一、前言 在获取map对象或者是其他深层嵌套对象&#xff0c;如果你的做法是挨个取出判空然后继续再向下查找&#xff0c;那么可以看看本文的方案&#xff0c;它或许能让你打开新的思路。 作为一名java开发人员&#xff0c;Mybatis几乎是我们无法避开的ORM框架&#xff0c;如果你…...

javaEE WebServlet、SpringWebMVC、SpringBoot实现跨域访问的4种方式及优先级,nginx配置跨域

文章目录 1. 前置知识2. 原理和解决方案总结2.1. 跨域不通过原理流程图2.2. 实现原理&#xff1a;添加以下http响应头2.3. 四种跨域实现方式及优先级&#xff08;从高到低&#xff09; 3. 具体实现代码3.1. 跨域全局配置方式-Filter(全适用)3.2. 跨域全局配置方式-SpringMvc3.3…...

深入理解JavaScript性能优化:从基础到高级

引言 在当今快速发展的Web世界中,性能已经成为衡量应用质量的关键指标。随着Web应用复杂度的不断提升,JavaScript作为前端开发的核心语言,其性能优化变得尤为重要。本文旨在全面深入地探讨JavaScript性能优化的各个方面,从基础概念到高级技巧,帮助开发者构建高效、流畅的Web应用…...

java+springboot实现定时任务

由于是初级程序员&#xff0c;基于注解的形式实现了一个简单的定时任务&#xff1b; 1. 使用Scheduled注解 Spring的Scheduled注解是一种非常简单和便捷的实现定时任务的方式。通过在方法上添加Scheduled注解&#xff0c;我们可以指定方法在特定的时间间隔或固定的时间点执行…...

1.3 数据库的发展历史与演变

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 工&#x1f497;重&#x1f497;hao&#x1f497;&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题.…...

The field file exceeds its maximum permitted size of 1048576 bytes

场景: 再系统后台上传解析对账文件时大小超过1M就会报错 分析: 排查错误时了解MultipartFile默认上传大小就是1M,但是发现项目配置文件配置了上传大小100M,但是这个大小没有生效 因为项目启动并没有使用到这个配置大小并把他应用到file配置里面,经过测试发现只需要增加配置…...

【Es】python es操作

表 因为es是集群所以es_hosts是列表 from elasticsearch import Elasticsearch ES_HOSTS ["127.0.0.1:9200"] ES_HTTP_AUTH "******************"# 连接Es es Elasticsearch(hostsES_HOSTS ,http_authES_HTTP_AUTH ,maxsize60,timeout30,max_retries3…...

中国蚁剑启动报错全解析:从加载失败到空白界面的终极修复指南

1. 中国蚁剑启动报错的三大常见场景 第一次打开中国蚁剑就遇到报错&#xff0c;那种感觉就像刚拿到新玩具却发现电池没电。根据我这些年处理过的案例&#xff0c;启动问题主要集中在三个方向&#xff1a;界面加载失败、解压权限错误和空白界面。这些问题看似复杂&#xff0c;其…...

避坑指南:用STK 11.2计算卫星相对位置时,90%的人会忽略的VVLH坐标系和投影矢量设置细节

避坑指南&#xff1a;STK 11.2卫星相对位置计算中的VVLH坐标系与投影矢量核心细节解析 在航天任务分析与卫星轨道设计中&#xff0c;精确计算两颗卫星的相对位置是碰撞预警、编队飞行控制等场景的基础需求。STK&#xff08;Systems Tool Kit&#xff09;作为行业标准软件&#…...

摆脱论文困扰!高效论文写作全流程AI论文平台推荐(2026 最新)

论文写作全流程可拆解为文献调研→选题/开题→大纲/初稿→文献综述→降重/去AI味→润色/格式→查重/投稿七大环节&#xff0c;2026年AI论文平台按环节精准匹配&#xff0c;兼顾中文适配、降重能力、去AI痕迹、学术合规四大核心需求&#xff0c;覆盖免费/付费、通用/垂直场景。一…...

新手零基础入门:跟着快马生成的互动教程完成jdk17下载安装与第一个程序

作为一名Java初学者&#xff0c;第一次接触JDK安装可能会觉得有些迷茫。最近我在InsCode(快马)平台上尝试了一个JDK17安装教程项目&#xff0c;整个过程比我预想的要简单很多。下面就把我的学习笔记分享给大家&#xff0c;希望能帮助到同样刚入门的朋友。 JDK17下载步骤 首先需…...

告别鼠标卡顿:Mac Mouse Fix实现第三方鼠标全栈优化,效率提升200%的实战指南

告别鼠标卡顿&#xff1a;Mac Mouse Fix实现第三方鼠标全栈优化&#xff0c;效率提升200%的实战指南 【免费下载链接】mac-mouse-fix Mac Mouse Fix - A simple way to make your mouse better. 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 问题溯…...

YOLOv8推理慢?CPU深度优化技巧让速度提升2倍

YOLOv8推理慢&#xff1f;CPU深度优化技巧让速度提升2倍 你是不是也遇到过这种情况&#xff1f;部署了YOLOv8模型&#xff0c;功能强大&#xff0c;检测精准&#xff0c;但一到实际推理就卡得不行&#xff0c;CPU占用率飙升&#xff0c;处理一张图片要等好几秒。尤其是在没有G…...

聊天记录丢失?这款开源工具让数据安全不再愁

聊天记录丢失&#xff1f;这款开源工具让数据安全不再愁 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾经历过手机意外损坏后丢失数年聊天记录的痛苦&#xff1…...

别再傻傻分不清了!AUTOSAR里那三种接口到底怎么用?

AUTOSAR接口全解析&#xff1a;从快递员到内部电话的通信哲学 刚接触AUTOSAR的工程师们&#xff0c;面对琳琅满目的接口类型时&#xff0c;是否常有种"明明每个字都认识&#xff0c;连起来却看不懂"的困惑&#xff1f;就像第一次走进高级餐厅&#xff0c;面对三种看…...

SpringBoot+MyBatis事务控制实战:从默认行为到精细化手动管理

1. SpringBootMyBatis事务的默认行为解析 第一次在SpringBoot项目中使用MyBatis时&#xff0c;我发现一个有趣的现象&#xff1a;明明没有显式开启事务&#xff0c;数据库操作却自动运行在事务中。后来通过日志分析才明白&#xff0c;这是SpringBoot的默认行为。就像我们去餐厅…...

socat-windows:开发者与管理员必备的跨平台数据转发工具

socat-windows&#xff1a;开发者与管理员必备的跨平台数据转发工具 【免费下载链接】socat-windows unofficial windows build of socat http://www.dest-unreach.org/socat/ 项目地址: https://gitcode.com/gh_mirrors/so/socat-windows 在网络调试与数据传输领域&…...