异常捕获

news/2025/1/16 10:51:28/文章来源:https://www.cnblogs.com/megshuai/p/18517672

异常捕获

当你的程序出现例外情况时就会发生异常(Exception)。例如,当你想要读取一个文件时,而那个文件却不存在,怎么办?又或者你在程序执报错了怎么办?这些通过使用异常来进行处理。类似地,如果你的程序中出现了一些无效的语句该怎么办?python 将会对此进行处理,举起(Raises)它的小手来告诉你哪里出现了一个错误(Error)。

当发生异常时,我们就需要对异常进行捕获,然后进行相应的处理。python的异常捕获常用try...except...结构,把可能发生错误的语句放在try模块里,用except来处理异常,每一个try,都必须至少对应一个except。此外,与python异常相关的关键字主要有

关键字 关键字说明
try/except 捕获异常并处理
pass 忽略异常
as 定义异常实例(except MyError as e)
else 如果try中的语句没有引发异常,则执行else中的语句
finally 无论是否出现异常,都执行的代码
raise 抛出/引发异常

try捕获到异常后,将不往下执行

异常捕获

预判在某一个位置可能会出现异常的时候,将这个错误捕获出来

try:				#捕获对象被捕获子语句
except 异常类型:	#捕获报错操作语句

捕获所有异常

包含键盘中断和程序退出请求,慎用

try:<语句>
except:<语句>

案例

try:import syssys.exit()
except:print("999")

捕获指定异常

try:<语句>except <异常名>:print('异常说明')
try:print("name-1")nameprint("name-2")
except NameError:print("格式错误")

万能异常捕获,捕获所有异常

try:<语句>except Exception:print('异常说明')
try:f = open("file-not-exists", "r")
except Exception:print("错误类型")

捕获多个异常

捕获多个异常有两种方式,

第一种是except同时处理多个异常,不区分优先级:

try:<语句>except (<异常名1>, <异常名2>, ...):print('异常说明')

第二种是区分优先级的:

try:<语句>except <异常名1>:print('异常说明1')except <异常名2>:print('异常说明2')except <异常名3>:print('异常说明3')

该种异常处理语法规则是:

  • 执行try下的语句,如果引发异常,则执行过程会跳到第一个except语句。
  • 如果第一个except中定义的异常与引发的异常匹配,则执行该except中的语句。
  • 如果引发的异常不匹配第一个except,则会搜索第二个except,允许编写的except数量没有限制。
  • 如果所有的except都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。

异常中的else

如果判断完没有某些异常之后还想做其他事,就可以使用下面这样的else语句。

try:<语句>except <异常名1>:print('异常说明1')except <异常名2>:print('异常说明2')else:<语句>  # try语句中没有异常则执行此段代码

使用else字句把所有的语句都放在try字句里面要好,这样可以避免一些意想不到,而except又无法捕获的异常。

异常中的finally

try..finally...语句无论是否发生异常都将会执行的最后的代码

     <语句>

raise主动触发异常

可以使用raise语句自己触发异常,raise语法格式

raise [Exception [, args [, traceback]]]

函数实现两个数值的除法计算

"""
函数实现两个数值的除法计算*
"""def division(a,b):num = a / breturn numtry:bcf = int(input("输入被除数:"))cf = int(input("输入除数:"))endnum = division(bcf,cf)print(endnum)
except ZeroDivisionError:print("除数不能为0")except ValueError:print("输入一个整数")
except EOFError:passexcept KeyboardInterrupt:pass

常见异常类型

异常名称 描述
BaseException 所有异常的基类
SystemExit 解释器请求退出
KeyboardInterrupt
Exception 常规错误的基类
StopIteration 迭代器没有更多的值
GeneratorExit 生成器(generator)发生异常来通知退出
StandardError 所有的内建标准异常的基类
ArithmeticError 所有数值计算错误的基类
FloatingPointError 浮点计算错误
OverflowError 数值运算超出最大限制
ZeroDivisionError 除(或取模)零 (所有数据类型)
AssertionError 断言语句失败
AttributeError 对象没有这个属性
EOFError 没有内建输入,到达EOF 标记
EnvironmentError 操作系统错误的基类
IOError 输入/输出操作失败
OSError 操作系统错误
WindowsError 系统调用失败
ImportError 导入模块/对象失败
LookupError 无效数据查询的基类
IndexError 序列中没有此索引(index)
KeyError 映射中没有这个键
MemoryError 内存溢出错误(对于Python 解释器不是致命的)
NameError 未声明/初始化对象 (没有属性)
UnboundLocalError 访问未初始化的本地变量
ReferenceError 弱引用(Weak reference)试图访问已经垃圾回收了的对象
RuntimeError 一般的运行时错误
NotImplementedError 尚未实现的方法
SyntaxError
IndentationError 缩进错误
TabError Tab 和空格混用
SystemError 一般的解释器系统错误
TypeError 对类型无效的操作
ValueError 传入无效的参数
UnicodeError Unicode 相关的错误
UnicodeDecodeError Unicode 解码时的错误
UnicodeEncodeError Unicode 编码时错误
UnicodeTranslateError Unicode 转换时错误
Warning 警告的基类
DeprecationWarning 关于被弃用的特征的警告
FutureWarning 关于构造将来语义会有改变的警告
OverflowWarning 旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning 关于特性将会被废弃的警告
RuntimeWarning 可疑的运行时行为(runtime behavior)的警告
SyntaxWarning 可疑的语法的警告
UserWarning 用户代码生成的警告

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/824644.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎样设置OKR

设置OKR的关键步骤是:一、确定目标(Objectives);二、设定关键结果(Key Results);三、设定优先级和责任人;四、跟踪和评估。明确目标是成功设置OKR的关键,只有在此基础上,才能制定出有意义的关键结果和OKR,从而帮助企业或个人实现目标。一、确定目标(Objectives) 目…

leetcode560 和为k的子数组

leetcode560 和为k的子数组package java2024_10.day30;import java.util.HashMap;public class leetcode560 {/*思路:前缀和+哈希表a[j]-a[i]=k即a[i]=a[j]-k遍历到下标j的时候,先判a[j]==k,相等就ans++,然后查哈希表中a[j]-k的数的个数,然后把a[j]放入哈希表中相当于:1.…

20222314 2024-2025-1 《网络与系统攻防技术》 实验三实验报告

网络与系统攻防实验报告 实验时间:2024-10-25 ~ 2024-10-31 实验人员:20222314陈振烨 实验地点:地下机房 指导教师:王志强 本周学习内容 学习了免杀的相关原理,掌握了msf的编码免杀基本操作,成功下载了veil加壳器并进行加壳免杀 实践内容 (1)正确使用msf编码器,veil-eva…

如何在Go中进行单元测试

# 如何在Go中进行单元测试 在Go语言中进行单元测试是确保代码质量和功能正确性的重要手段。Go的标准库提供了`testing`包来支持单元测试、基准测试、示例函数等测试方式。本文将详细介绍如何在Go语言中有效地进行单元测试,包括编写测试用例、运行测试、使用表驱动测试、测试覆…

多线程在打包工具中的运用

我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。本文作者:UED 团队现代操作系统都是「多任务」的,也就是操作系统可以「并发」处理多个任务,比如可以在浏览页面的时候同时播放音乐。但是,…

网易伏羲:智能体驱动 未来可期 | 《天堂硅谷》杂志报道

近日,网易伏羲产品总监Jeff接受《天堂硅谷》杂志「创业在高新」专栏采访,分享网易伏羲在人工智能领域的最新成就与未来发展愿景,如全球首创的游戏Copilot AI队友及“灵动”机器人品牌,展现了网易伏羲从游戏到实体产业的全方位技术应用与突破。《天堂硅谷》杂志由杭州市高新…

知识点

1.OSI七层网络模型以及TCP/IP四层网络模型2.Web客户端作用:发送request请求 接受response响应 解析response响应 javascript的执行3.常见的安全测试类型:认证与授权 session 和 cookie 文件上传漏洞 缓存溢出漏洞 SQL注入 XSS跨站脚本攻击 DDos分布式拒绝服务攻击4.http的相应…

行为识别常用哪种特征提取

行为识别在许多领域,如安全监控、人机交互和健康监测中,起着关键作用。特征提取是行为识别的重要步骤。常用的特征提取方法有:1. 时间域特征提取;2. 频率域特征提取;3. 时频域特征提取;4. 深度学习特征提取。其中,时间域特征提取关注信号的统计性质,如均值、方差等,常…

idea 自动生成注释

idea 注释 一.类注释 创建类时自动生成 1. file >> settings Editor >> FIle and Code Templates 2.添加 /*** Title : ${NAME}<br>* Description : <br>* Create on : ${DATE} ${TIME}<br>* * @author Li Xiaojun* @version 1.0.0**/ 二. 方法…

知识星球

欢迎大家加入

如何防止服务器端的php文件被下载

### 如何防止服务器端的PHP文件被下载 在网络安全日益重要的今天,防止服务器端的PHP文件被下载是保护网站安全、保障数据不被泄露的关键措施之一。简单来说,防止PHP文件被下载主要有以下几个方法:设置正确的文件权限、配置服务器正确处理PHP文件、使用.htaccess文件防止直接…

Serverless + AI 让应用开发更简单

本文旨在探讨 Serverless 架构与 AI 技术的结合,如何通过 Serverless 函数计算和 AI 开发平台,助力企业简化应用开发流程,减少企业 AI 业务试错成本,加速业务创新,为企业业务发展提供无限可能。本文整理自 2024 云栖大会,阿里云智能高级技术专家,史明伟演讲议题《Server…