当前位置: 首页 > 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`语句,你可以控制程序的异常流程,并提供更好的用户体验。
 

http://www.lryc.cn/news/425428.html

相关文章:

  • 多张图像实现全景无痕拼接操作
  • 在阿里云ecs上构建一个WordPress博客网站
  • 安卓应用开发学习:查看手机传感器信息
  • C语言字符串缺陷
  • 分布式场景中的常见的技术问题及解决,如分布式锁、分布式事务、分布式 session、分布式任务调度
  • Android笔试面试题AI答之Kotlin(9)
  • C# 不一样的洗牌算法---Simd指令
  • LVGL系列3--纯物理(外部)按键,数字键盘控制控件
  • FPGA开发——UART回环实现之接收模块的设计
  • Debezium系列之:记录一次SQLServer数据库数据不采集,恢复采集造成下游承压的情况,以及相对应的详细解决方案
  • Linux线程基础学习记录
  • 【Python学习-UI界面】PyQt5 小部件12-QStackedWidget 多页显示
  • Mybatis中好用的元对象反射工具类 - MetaObject
  • javaEE WebServlet、SpringWebMVC、SpringBoot实现跨域访问的4种方式及优先级,nginx配置跨域
  • 深入理解JavaScript性能优化:从基础到高级
  • java+springboot实现定时任务
  • 1.3 数据库的发展历史与演变
  • The field file exceeds its maximum permitted size of 1048576 bytes
  • 【Es】python es操作
  • 吃透前端文件上传与文件相关操作 多文件上传 大文件切片上传 拖拽上传 后续还会更新 断点续传等等
  • 用python制作88键赛博钢琴(能用鼠标键盘进行弹奏)
  • zdpgo_gin_login 框架20240815更新,增加注册路由的功能,一个方法自动拥有注册和登录两个API接口
  • 搭配Intel第13代酷睿处理器
  • uniapp快速回顾,新学websocket连接和BLE连接
  • 激光测距传感器
  • 从数据分析到智能生产:AI在工业中的应用与未来
  • 讲讲android art虚拟机的内存
  • 构建高效社群生态:探索社群系统的力量与未来
  • 数据结构——排序(3):交换排序(续)
  • 2024最新版本Python安装及开发环境配置(vscodepython)