python基础篇-异常捕获和抛出
一、异常的定义
在 Python 中,异常(Exception)指在程序执行期间出现的错误或异常情况。这些异常可能是由各种原因引起的,如输入错误、文件不存在、网络连接问题等。在 Python 中,可以使用 try/except 语句来捕捉异常,并在发生异常时执行特定的代码块。
二、常见的异常状况/异常类型
在 Python 中,常见的异常类型有:
TypeError(类型错误):当一个操作或函数应用于不支持该操作或函数的对象类型时引发。
ValueError(值错误):当一个操作或函数应用于正确类型的对象,但对象的值不适合该操作或函数时引发。
IndexError(索引错误):当尝试访问一个不存在的索引或切片时引发。
KeyError(键错误):当尝试访问一个不存在的字典键时引发。
NameError(名称错误):当尝试访问一个未定义的变量或函数时引发。
IOError(输入输出错误):当一个输入输出操作(例如打开文件或读写文件)失败时引发。
ZeroDivisionError(除零错误):当试图除以零时引发。
AttributeError(属性错误):当尝试访问一个不存在的对象属性时引发。
KeyboardInterrupt(键盘中断错误):当用户按下键盘中断信号(Ctrl+C)时引发。
Exception(异常):所有其他异常类型的基类。
三、异常的处理
异常捕获
以下是 Python 中常用的几种异常捕获方法:
try-except 语句
try-except 语句是最常用的异常处理方式。它用于捕获代码中可能抛出的异常,并提供相应的处理逻辑。try 语句块中包含可能抛出异常的代码,而 except 语句块中包含处理异常的代码。
try:# 可能抛出异常的代码
except SomeException:# 处理异常的代码
try-except-else 语句
try-except-else 语句与 try-except 语句类似,但它还包含一个 else 语句块。else 语句块包含的代码只有在 try 语句块中没有抛出异常时才会执行。
try:# 可能抛出异常的代码
except SomeException:# 处理异常的代码
else:# 没有异常时执行的代码
try-except-finally 语句
try-except-finally 语句与 try-except 语句类似,但它还包含一个 finally 语句块。finally 语句块中包含的代码总是会被执行,无论 try 语句块中是否抛出异常。
try:# 可能抛出异常的代码
except SomeException:# 处理异常的代码
finally:# 总是会执行的代码
多个异常类型的捕获
try:# 可能会引发异常的代码
except ExceptionType1:# 处理异常类型 ExceptionType1 的代码
except ExceptionType2:# 处理异常类型 ExceptionType2 的代码
...
except ExceptionTypeN:# 处理异常类型 ExceptionTypeN 的代码
else:# 没有发生异常时执行的代码
finally:# 无论是否发生异常,都会执行的代码
如果 try 语句块中的代码抛出 ExceptionType1 异常,就会执行 except ExceptionType1 语句块中的代码。如果抛出 ExceptionType2 异常,就会执行 except ExceptionType2 语句块中的代码。
举例说明如何使用 try-except 语句块来捕获和处理代码异常:
try:# 可能会引发异常的代码num1 = int(input("请输入一个整数:"))num2 = int(input("请输入另一个整数:"))result = num1 / num2print("两数相除的结果为:", result)
except ValueError:# 处理输入非整数的异常print("输入的不是整数,请重新输入。")
except ZeroDivisionError:# 处理除数为 0 的异常print("除数不能为 0,请重新输入。")
except Exception as e:# 处理其他未知异常print("发生了未知异常:", e)
else:# 没有发生异常时执行的代码print("计算成功。")
finally:# 无论是否发生异常,都会执行的代码print("程序结束。")
在上面的示例中,我们使用 try-except 语句块来捕获和处理代码的异常。在 try 块中,我们尝试获取用户输入的两个整数,并计算它们的商。如果用户输入的不是整数,或者除数为 0,就会引发相应的异常。如果发生了其他未知的异常,则会被 except 块捕获。在 else 块中,我们定义了没有发生异常时要执行的代码。在 finally 块中,我们定义了无论是否发生异常,都要执行的代码。
异常抛出
raise 语句用于抛出异常。它可以接受一个异常类或异常实例作为参数。如果不提供参数,则会抛出最近的异常。
抛出指定的异常
if x < 0:raise ValueError("x 不能是负数")
ps:如果 x 的值小于 0,就会抛出一个 ValueError 异常,并将错误信息设置为 "x 不能是负数"。
抛出自定义的异常
class MyException(Exception):passif some_condition:raise MyException("自定义异常信息")
ps:如果 some_condition 条件为真,就会抛出一个自定义的 MyException 异常,并将错误信息设置为 "自定义异常信息"。
处理异常后重新抛出异常
try:# 可能抛出异常的代码
except SomeException as e:# 处理异常的代码raise AnotherException("重新抛出异常") from e
如果 try 语句块中的代码抛出 SomeException 异常,就会执行 except 语句块中的代码。在处理异常的代码中,可以使用 raise 关键字重新抛出异常,同时设置一个新的异常类型和错误信息。通过 from 关键字指定原始异常,这样可以保留原始异常的栈信息。
异常断言
在 Python 中,使用 assert 关键字进行异常断言。assert 语句用于在代码中检查某些条件是否为真。如果条件为假,则会抛出 AssertionError 异常。
assert condition, [message]
其中, condition 是要检查的条件,如果为 False,就会抛出一个 AssertionError 异常。 message 是一个可选参数,用于指定错误信息。
举例如何对登录用户进行异常断言
def login(username, password):assert username != '', "用户名不能为空"assert password != '', "密码不能为空"# 其他登录逻辑username = ''
password = '123456'
login(username, password)
四、异常处理的注意事项
在 Python 中,异常处理是一种常见的错误处理方式。虽然异常处理可以使我们的程序更加健壮、可靠和易于调试,但在实践中也需要注意以下几点:
尽可能精确地捕获异常:在捕获异常时,应该尽可能地精确指定要捕获的异常类型。如果捕获的异常类型太宽泛,可能会导致程序处理不当或无法正确诊断错误。
不要忽略异常:在捕获异常时,不要忽略异常或仅打印异常信息而不采取任何措施。否则可能会导致程序继续执行,并产生更加严重的问题。
在 finally 块中处理资源释放等操作:在处理异常时,可能需要进行资源释放等操作。为了确保这些操作能够被正确执行,应该将它们放在 finally 块中。
在处理异常时避免产生新的异常:在处理异常时,应该避免产生新的异常,因为这可能会导致原始异常被掩盖或错误处理。
使用上下文管理器管理资源:在 Python 中,可以使用上下文管理器来管理资源,例如文件、网络连接等。上下文管理器可以在进入和退出代码块时自动管理资源,从而避免资源泄漏和其他问题。
python基础篇-异常捕获和抛出相关推荐
- ORACLE 存储过程异常捕获并抛出
ORACLE 存储过程异常捕获并抛出 参考文章: (1)ORACLE 存储过程异常捕获并抛出 (2)https://www.cnblogs.com/wdw31210/p/7009731.html 备忘 ...
- oracle异常抛出,ORACLE 存储过程异常捕获并抛出
for tab_name in tables loop execute immediate 'drop table '||tab_name; --此处可能会报错 end loop; 当前情况是,循环表 ...
- Python异常捕获和抛出-对方不想和你说话并向你抛出了一个异常
文章目录 异常信息 捕获异常 多重异常处理 抛出异常 内置异常类型 自定义异常类型 异常信息 Python使用异常类来管理异常信息.当发生异常的时候,程序会抛出一个异常信息,自动根据代码的层次查找异常 ...
- 【java基础】java异常,捕获与抛出
java异常,捕获与抛出 1.概念: 在java里,所有的异常都有一个共同的祖先Throwable(可抛出). Throwable:有两个重要的子类:Exception(异常)和Error(错误). ...
- Spring捕获AOP抛出的异常
Spring捕获AOP抛出的异常 背景 解决过程 最初方案 失败探索 添加AOP 继承SDK的AOP类 修改AOP生效条件 最终解决方案--BeanPostProcessor 总结 背景 在最近开发中 ...
- java 异常 不抛,java中不捕获或抛出的异常
java中不捕获或抛出的异常 发布时间:2020-06-25 14:29:16 来源:亿速云 阅读:137 作者:Leah 这期内容当中小编将会给大家带来有关java中不捕获或抛出的异常,文章内容丰富 ...
- java 异常捕获抛出_JAVA异常处理捕获与抛出原理解析
JAVA 异常 当代码运行出现错误导致程序终止运行或出现错误情况的状况,就是异常.异常不是指语法错误,即不属于编译错误,只有运行的程序才会有异常. 这个时候,JAVA 就提供了优秀的处理方法:异常处理 ...
- .NET 指南:捕获并且抛出标准的异常类型
下列指导方针为 .NET Framework 所提供的一些最常用的异常而描述了最佳的实践.关于 .NET Framework 所提供的完整的异常类列表,请参考:[.NET Framework 类库参考 ...
- python包括哪些部分_第一部分 Python基础篇
第⼀一部分 Python基础篇 1. 为什什么学习Python? 朋友推荐,比较简单易学,生态圈比较强大 发展趋势:人工智能.数据分析 2. 通过什什么途径学习的Python? 廖雪峰.网络博客.相关 ...
- 十九. Python基础(19)--异常
十九. Python基础(19)--异常 1 ● 捕获异常 if VS异常处理: if是预防异常出现, 异常处理是处理异常出现 异常处理一般格式: try: <...............&g ...
最新文章
- 《数据科学家养成手册》--“什么性质的人才能称得上科学家?” “科学的意思”
- “Query结构化分析及槽位填充” byte dance NLP lambda在线讲的不错的
- python类的继承 被继承类放在类后面的括号中
- dubbo服务使用spring-data-mongodb进行时间查询的bug记录
- 实时SLAM的未来及深度学习与SLAM对比
- 第一篇 webApp启航
- 互联网1分钟 |1225
- SQL 学习与工作日常:语句积累
- 如何读懂并写出装逼的函数式代码 1
- Office Web App2013 在线查看PDF文件
- nvsip能用别的软件吗_为什么很多企业转向了 Golang? Java, Python, C#没落了吗?
- python数字1 3怎么表示_Python3 数字类型
- swc反编译工具_JPEXS Free Flash Decompiler(Flash反编译工具)v11.3.0 中文免费版-ucbug软件站...
- 如何去掉论坛后缀 “power by discuz!
- C语言打印九九口诀表
- 小火狐进化_口袋妖怪xy三主进化详细介绍
- mybatis mybatis的resultType详解
- 电影网站 php asp,moviewebsite 这是一个电影网站的源码,基于asp技术实现.仅供交流学习 WEB(ASP,PHP,...) 238万源代码下载- www.pudn.com...
- 成功WEB商务的7步走(7)——PDCA
- echarts 折线图设置曲线平滑