Python中异常捕获与处理的方法总结
作者:轻松学Python 发布时间:2023-12-10 07:48:24
Python异常是在程序执行时发生的错误,可能会导致程序终止运行。
在Python中,异常处理是一种机制,它允许开发人员在程序发生异常时捕获、处理和报告这些异常,以便程序可以继续运行或在出现异常时进行优雅的退出。
在Python中,异常可以是标准异常(例如SyntaxError和TypeError)或自定义异常。标准异常是由Python内部定义的,而自定义异常是由开发人员定义的,通常用于特定的应用程序或库。
以下是一些常见的Python异常:
SyntaxError:语法错误,通常是由于语法错误导致的,如缺少括号、冒号等。
TypeError:类型错误,通常是由于将不同类型的对象组合在一起而引起的,如将字符串和数字相加。
ValueError:值错误,通常是由于提供的值不符合预期的范围或格式而引起的,如将字符串转换为整数时提供的字符串无效。
IndexError:索引错误,通常是由于尝试访问列表或元组中不存在的元素而引起的。
KeyError:键错误,通常是由于尝试访问字典中不存在的键而引起的。
IOError:输入/输出错误,通常是由于尝试读取或写入文件时出现问题而引起的。
AttributeError:属性错误,通常是由于尝试访问对象不存在的属性或方法而引起的。
在Python中,可以使用try-except语句来捕获异常并处理它们。try语句包含可能会导致异常的代码,而except语句定义了在捕获异常时要执行的代码。
可以使用多个except语句来捕获不同类型的异常,try-except 还可以跟else 进行搭配,它的含义就是当 try 语句没有检测到任何异常的情况下,就执行 else 语句的内容,另外也可以使用finally语句定义在try语句块之后始终要执行的代码。
例如:
案例1:使用try-except语句来捕获异常并处理它们
举例:
try:
100/0 # 可能会导致异常的代码
except ZeroDivisionError: #(捕获特定的异常类型ZeroDivisionError,ZeroDivisionError是Python中的内置异常类之一,用于表示在除数为零的情况下进行了除法操作所引发的异常。)
print('因为这里打印出异常类型:除数不能为0。')# 处理值错误的代码
案例2:使用try-except语句搭配else语句(当 try 语句没有检测到任何异常的情况下,就执行 else 语句的内容)
当 try 语句检测到任何异常的情况下,则不执行else 语句的内容
>>> try:
... 1 / 0
... except:
... print("逮到了~")
... else:
... print("没逮到~")
...
逮到了~
如果在 try 语句中检测到异常,那么就执行 except 语句的异常处理内容:
>>> try:
... 1 / 1
... except:
... print("逮到了~")
... else:
... print("没逮到~")
...
1.0
没逮到~
案例3:使用try-except语句搭配finally语句(无论异常发生与否,都必须要执行的语句finally语句)
举例:
try:
‘abc’+ 123
except TypeError: #TypeError为类型错误,通常是由于将不同类型的对象组合在一起而引起的,如将字符串和数字相加。
print('因为这里打印出异常类型:类型错误。')# 处理类型错误的代码
finally:
print('不论是否无法异常,都执行这句话') # 无论是否发生异常都会执行的代码
异常处理是Python中的重要概念之一,开发人员应该了解如何正确地捕获和处理异常,以确保程序的稳定性和可靠性。
进阶:捕获异常的方法
捕获异常的两种方法:不管是何种异常,都捕获异常信息。
1.使用Exception:所有的异常都是 Exception 的子类。所以 Exception能匹配所有类型的异常。
举例:
>>> try:
100/0
except Exception as e:
print('未知异常:', e)
# 对于很多刚学Python或者是学着学着迷茫了的小伙伴,我给大家准备了一套Python的学习资料。
# 包括数百本电子书、Python基础视频教程、项目实战,疑难解答,直接在文末名片自取。
未知异常: division by zero
>>>
可以正常捕获到异常的原因,但不能输出详细的异常信息(发送异常的位置和异常的代码)。
2.使用traceback模块:使用traceback模块里面的format_exc函数,可以显示异常的信息 和 异常产生处的函数调用栈的信息。
举例:
>>> import traceback
>>> try:
100/0
except :
print(traceback.format_exc())
Traceback (most recent call last):
File "<pyshell#5>", line 2, in <module>
ZeroDivisionError: division by zero
>>>
上面的代码会打印出导致异常的详细的函数调用栈的信息
来源:https://blog.csdn.net/ooowwq/article/details/130388794


猜你喜欢
- 前言在这个教程中,我们将会通过几个例子,了解和学习VueJs的过滤器。阅读这这篇文中的前提是你对Vue已经有了基本的语法基础。Vue.Js中
- 通过ip2region解析IP获得地域信息目标,从给的读取给的ip地址文件解析出ip地域名并输出CSV文件,我选用的是开源ip2region
- python清空命令行 !有时我们在命令行上运行一些代码时,觉得有些冗余了,可以通过以下代码进行清除命令行上的代码。import osdef
- 好久没有弄JS了,因为我烦里边的大小写。其实和vbs差不多的,不过我看vbs毕竟应用面不广了,呵呵。var w=WScript.create
- 假如有一个数组是这样子:var arr1 = ["a", "b", "c", &
- 本文介绍python如何进行截图保存的几种方法,在测试过程中,是有必要截图,特别是遇到错误的时候进行截图。结合Python其它模块如time
- 目录前言limit深分页为什么会变慢?通过子查询优化回顾B+ 树结构把条件转移到主键索引树INNER JOIN 延迟关联标签记录法使用bet
- 这篇文章主要介绍了python Opencv计算图像相似度过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价
- 介绍在机器视觉领域的深度学习中,每个数据集都有一份标注好的数据用于训练神经网络。为了节省空间,很多数据集的标注文件使用RLE的格式。但是神经
- 目录何为模式匹配下载pampy栗子单个字符匹配匹配开头和结尾匹配字典的key使用特性1: HEAD 和 TAIL特性2:甚至能匹配字典中的键
- 在oracle中创建一个函数,本来是想返回一个index table的,没有成功。想到文本也可以传输信息,就突然来了灵感,把返回值设置文本格
- 背景最近用uni-app开发小程序项目时,部分需要持久化的内容没法像其他vuex中的state那样调用,所以想着自己实现一下类似vuex-p
- 1 基本用法把序列乘以一个整数,就会产生一个新序列。这个新序列是原始序列复制了整数份,然后再拼接起来的结果。l=[1,2,3]l2=l *
- 这是初始状态 输入文字变成这样,这里会区分圆角半角,2个半角的文字算一个。 这个是超出的样子 如果超出了点击提
- 微信指数爬取 Appium + mitmproxy + 网易mumu安卓模拟器实现微信指数小程序爬取通过appium实现将指令传输
- 本文详细介绍了asp中如何使用sql语句删除数据库中的记录,初学asp者来看看!1,首先要明确删除哪条记录无非还就是SQL语句了,比如对应到
- 对MySQL的用户而言,备受诟病的一个问题就是导入SQL备份文件时不能并发,使得导入的效率很低。今天,我们就来改变下思路,尝试一下并发导入的
- 以下内容给大家介绍了MYSQL通过Adjacency List (邻接表)来存储树形结构的过程介绍和解决办法,并把存储后的图例做了分析。今天
- 如下所示:#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2018/7/13 1
- 本文实例讲述了Python数学形态学。分享给大家供大家参考,具体如下:一 原始随机图像1、代码import numpy as npimpor