Python学习笔记(七) 异常处理

简介: Python学习笔记(七) 异常处理

这篇文章将会介绍 Python 中异常及其处理方法



1、基本概念


异常是一种非正常状态,它表示程序在执行过程中发生错误

在实际情况中,可能会有多种原因导致程序出现异常状态,而每种异常状态都会由一个异常对象表示

当程序出现异常状态时,会抛出一个异常对象,如果该对象未被捕获和处理,程序将会中止

在一般情况下,程序员需要考虑各种可能的异常原因,手动捕获并处理异常,以避免程序突然中止


2、异常类型


导致程序出现异常的原因有很多,以下列举一些系统内置的常见的异常对象

异常对象 描述
Exception 几乎所有异常类的基类
SyntaxError 语法错误
TypeError 将内置函数用于类型不正确的对象
ValueError 将内置函数用于类型正确但包含值不正确的对象
AttributeError 引用属性错误
NameError 引用变量错误
IndexError 使用序列中不存在的索引
KeyError 使用映射中不存在的键值

除系统内置的异常对象外,用户还可以自定义异常对象,自定义的异常对象需要继承一个异常类

class MyException(Exception):
    def __init__(self, info):
        super().__init__(self)
        self.info = info
    def __str__(self):
        return self.info
try:
    raise MyException('my exception')
except MyException as e:
    print(e)
# my exception


3、异常抛出


当语句执行发生错误时,该语句会抛出一个异常

num = 1 / 0

除了被动抛出的异常外,我们还能使用 raise 语句主动抛出一个异常

raise Exception('Error')


4、异常处理

我们可以用 try-except 捕获和处理异常,若在 try 中出现异常,则马上执行 except 中的代码

try:
    print('begin')
    string = 'hello'
    number = int(string)
    print('end')
except:
    print('exception')
# begin
# exception

我们也能在 try-except 后加上 else,在没有捕获到异常时,else 中的代码才会被执行

try:
    string = 'hello'
except:
    print('exception')
else:
    print('else')
# else

我们还能在 try-except 后加上 finally,无论是否捕获到异常,finally 中的代码都会被执行

try:
    string = 'hello'
    number = int(string)
except:
    print('exception')
finally:
    print('finally')
# exception
# finally

此外可以在 except 语句后指定异常类型,那么该 except 语句就只能捕获这种类型的异常

一个没有指定异常类型的 except 语句能捕获所有异常,但这样不能得到任何有效信息

try:
    li = list()
    li.add(123)
except AttributeError as e:
    print('AttributeError:', e)
# AttributeError: 'list' object has no attribute 'add'

另外可以同时使用多个 except 语句处理不同的异常,但是要注意它们之间的顺序

因为当前面的 except 语句捕获到异常后,将不再执行后面的 except 语句

try:
    li = list()
    li[0] = 123
except IndexError as e:
    print('IndexError:', e)
except Exception as e:
    print('Exception:', e)
# IndexError: list assignment index out of range


5、异常传播


当一个异常被抛出时,异常所在的作用域需要捕获并处理该异常

若异常在当前作用域没有得到处理,那么它将一直向上层作用域传递,直至它能够被处理

若异常一直向上传递到主程序都没有得到处理,那么程序将自动终止并显示错误信息

def faulty():
  raise Exception('Error')
def handle_exception():
    try:
        faulty()
    except:
        print('Exception Handled')
def ignore_exception():
  faulty()
handle_exception() # Exception Handled
ignore_exception() # 异常逐层传递直至主程序
# Traceback (most recent call last):
#   File "index.py", line 14, in <module>
#     ignore_exception() # Exception: Error
#   File "index.py", line 11, in ignore_exception
#     faulty()
#   File "index.py", line 2, in faulty
#     raise Exception('Error')
# Exception: Error

文章知识点与官方知识档案匹配,可进一步学习相关知识


目录
相关文章
|
3月前
|
安全 Linux 网络安全
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(一)
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(一)
79 2
|
3月前
|
Python Windows 网络安全
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(二)
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(二)
96 2
|
2月前
|
UED 开发者 Python
Python中的异常处理机制
Python中的异常处理机制
48 2
|
3月前
|
网络协议 Java Linux
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
本文介绍了PyAV库,它是FFmpeg的Python绑定,提供了底层库的全部功能和控制。文章详细讲解了PyAV的安装过程,包括在Windows、Linux和ARM平台上的安装步骤,以及安装中可能遇到的错误和解决方法。此外,还解释了时间戳的概念,包括RTP、NTP、PTS和DTS,并提供了Python代码示例,展示如何获取RTSP流中的各种时间戳。最后,文章还提供了一些附录,包括Python通过NTP同步获取时间的方法和使用PyAV访问网络视频流的技巧。
580 4
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
|
3月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
187 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
3月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
209 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
3月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
77 1
|
3月前
|
Ubuntu Linux Python
Ubuntu学习笔记(六):ubuntu切换Anaconda和系统自带Python
本文介绍了在Ubuntu系统中切换Anaconda和系统自带Python的方法。方法1涉及编辑~/.bashrc和/etc/profile文件,更新Anaconda的路径。方法2提供了详细的步骤指导,帮助用户在Anaconda和系统自带Python之间进行切换。
162 1
|
3月前
|
安全 Java 程序员
Python 异常处理!
本文详细介绍了Python中的异常处理,包括try、except和finally语句的使用方法。文章区分了语法错误与异常,并列举了Python中常见的异常类型,如`SyntaxError`、`TypeError`等。通过具体示例展示了如何使用try-except块捕获和处理异常,以及如何结合else和finally子句增强代码的健壮性和可读性。此外,还介绍了如何使用raise语句主动抛出异常。通过合理的异常处理,可以提高程序的可靠性与调试效率,但也可能带来性能开销和代码复杂度的增加。
53 4
|
3月前
|
索引 Python
Python学习笔记编程小哥令狐~持续更新、、、(上)
Python学习笔记编程小哥令狐~持续更新、、、(上)
56 2