Python(八)-异常

news2024/11/28 19:40:09

目录

什么是异常

快速入门异常

常见的异常类型

常见处理方式

捕获一个指定异常

捕获多个异常

捕获所有的异常

异常的其他关键字

异常具有传递性


什么是异常

异常指的是Python程序发生的不正常事件。

有时候,异常可称为错误。

当检测到一个错误时,Python解释器就无法继续执行,反而出现了一些错误的提示,这就是异常,也就是我们常说的BUG。

快速入门异常

当程序中遇到了异常时,通常程序会出现崩溃情况。

为了不让程序崩溃,就可以使用异常来快速处理。

try:
    可能发生异常的代码
except:
    如果出现异常时, 执行的代码

例如,一起来完成:

(1)定义一个列表变量;

(2)获取一个远超列表索引值的元素,报错:IndexError。

print("hello 1")
print("hello 2")

j = 1/0 # 人为模拟一个异常 # ZeroDivisionError: division by zero

 解决方案

print("hello 1")
print("hello 2")

try:
    j = 1 / 0  # 人为模拟一个异常 # ZeroDivisionError: division by zero
except:
    pass # 暂时没有想好怎么处理异常, 咱跳过

常见的异常类型

NameError、IndexError、KeyError、TypeError 、ZeroDivisionError等

# 1 使用未定义的变量
print(a) # NameError: name 'a' is not defined

# 2 字符串下标越界异常
str = "abc"
print(str[0])
print(str[100]) # IndexError: string index out of range

# 3 列表和元组 下标越界异常
list1 = [1, 2, 3]
print(list1[0])
print(list1[100]) # IndexError: list index out of range

tuple1 = (1, 2, 3)
print(tuple1[0])
print(tuple1[100]) # IndexError: tuple index out of range

# 4 使用字典中没有的 key
dict1 = {
    "name" : "悟空",
    "skill" : "七十二变"
}
print(dict1["name"])
print(dict1["age"]) # KeyError: 'age'

# 5 分母为0
i = 10 / 0 # ZeroDivisionError: division by zero

# 6 文件或目录 不存在
path = "./file2/hello.txt"
with open(path, "w") as f: # FileNotFoundError: [Errno 2] No such file or directory: './file2/hello.txt'
    print("开始 ... ...")

# 7 类型异常
print("11" + 22) # TypeError: can only concatenate str (not "int") to str

常见处理方式

try:
    可能发生异常的代码
except:
    如果出现异常时, 执行的代码

print(111)

try:
    j = 1 / 0
except:
    pass

print(333333333)

捕获一个指定异常

try:
    可能发生异常的代码
except 异常类型名:
    当捕获到该异常类型时,执行的代码

print(111)

try:
    j = 1 / 0
except ZeroDivisionError:
    pass

print(333333333)

 捕获多个异常

try:
    可能发生异常的代码
except (异常类型1,类型2,...):
    如果捕获到该异常类型时,执行的代码

# 方式三 捕获多个异常
print("-------------------")

try:
    j = 1 / 0

    str = "abc"
    print(str[100])

except ZeroDivisionError:
    print("除法分母不得为零!")
except IndexError:
    print("下标越界异常!")

print(333333333)

# 方式四 捕获多个异常
print("---------------------")

try:
    str = "abc"
    print(str[100])

    j = 1 / 0

except (ZeroDivisionError, IndexError):
    print("报错!")

print(333333333)

# 方式四 捕获多个异常
print("-------------------")

try:
    j = 1 / 0


    str = "abc"
    print(str[100])
except (ZeroDivisionError, IndexError) as err:
    print(f"报错: {err}")

print(333333333)

捕获所有的异常

找第一个异常的问题,且Exception的首字母要大写。

try:
    可能发生异常的代码
except Exception[ as 变量]:
    当捕获到该异常类型时,执行的代码


# 案例1:找第一个  报错: division by zero
try:
    j = 1 / 0


    str = "abc"
    print(str[100])
except Exception as err:
    print(f"报错: {err}")
#
# print(333333333)

print("------------------------------")

# 案例二:找第一个  发生了异常信息...list index out of range
try:
    data = [1, 2, 3]
    print(data[100])
    dicts = {}
    print(dicts["name"])
except Exception as error:
    print(f"发生了异常信息...{error}")
print("hello world..")

异常的其他关键字

在捕获异常过程中,有两个关键字else、finally需要注意:

else:表示如果没有异常时,要执行的代码;
finally:表示的是无论是否有异常,都要执行的代码。

 当把else、finally都放入到捕获异常中,语法:

try:
    可能发生异常的代码
except 异常类型:
    当捕获到该异常类型时,执行的代码
else:
    没有异常信息时,执行的代码
finally:
    无论如何,都会执行的代码

# 1.制造异常
# 2.处理 指定异常
try:
    data = [1, 2, 3]
    print(data[100])
    # print(data[0])
except IndexError:
    print("====1====已发生异常信息!")
else: # 3.else:没有发生异常时,处理的事情
    print("没有发生异常时,才会执行代码!!")
finally:# 4.finally:文件必须关闭
    print("无论如何,都会执行finally!!")

 异常具有传递性

(1)定义两个函数test()、func();

(2)在一个函数中产生IndexError,同时在另一个函数中调用,观察效果。

# 1.func()
def func():
    print("==========A============")
    try:
        datas = [1,2,3]
        print(datas[100])
    except Exception:
        # 日志、埋点?    -->采集
        print("发生了异常信息...")   # 后台开发
    print("==========B============")

# 2.test()
def test():
    print("********1***********")
    func()
    print("********2***********")

# 3.调用test()
test()

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CPU飙高如何处理?

测试人员在压测的时候,会对应用进行测试,这个时候会查看cpu、内存、load、rt、qps等指标 CPU利用率是来描述CPU的使用情况的,表明了一段时间内CPU被占用的情况。使用率越高,说明机器在这个时间上运行了很多程序。 如何进行问题定…

codetop标签树刷题(四)!!暴打面试官!!!!

用于个人复习 1.二叉树的右视图2.二叉树最大宽度3.二叉树的最大深度4.N叉树的最大深度5.二叉树的最小深度6.子树的最大平均值7.求根节点到叶节点的数字之和8.另一棵树的子树9.对称二叉树 1.二叉树的右视图 给定一个二叉树的根节点root,想象自己站在它的右侧&#x…

麒麟操作系统如何识别提取图片中的文字

在工作、学习中,我们经常会需要从图片中提取文字,在手机上或其它操作系统上,有各种方法。本书中,我们介绍麒麟操作系统提取图片中文字的方法。 首先准备好自己需要的文档截图,把不需要的部分裁掉,以免影响…

电容笔值得买吗?2024精选盘点推荐五大惊艳平替电容笔!

电容笔还是很值得买的,不管是对于日常书写,简单笔记,还是绘画等场景而言,选择一款性价比高的平替电容笔都能提升生产力。可是现在市面上的品牌很多,该如何挑选最适合自己的电容笔呢?不用着急,我…

【AIGC半月报】AIGC大模型启元:2024.10(上)

【AIGC半月报】AIGC大模型启元:2024.10(上) (1) YOLO11(Ultralytics新作) (1) YOLO11(Ultralytics新作) 2024.10.01 Ultralytics在 YOLO Vision 2024 活动上宣布发布其新的计算机视觉模型 YOLO…

千元级体验--希亦ACE迷你洗衣机测评分享,宝妈必备的性价比好物

​小孩子的衣物是不建议和大人衣物一起洗的,一方面是他们的免疫力比较低下,如果和大人混杂各种污渍病菌一起洗的话,容易有感染细菌的可能。而另一方面,小孩子特别是女婴的衣物,更要仔细注意,因为大人的衣物…

ad.concat()学习

学习1 import anndata as ad, pandas as pd, numpy as np from scipy import sparse a ad.AnnData(Xsparse.csr_matrix(np.array([[0, 1], [2, 3]])),obspd.DataFrame({"group": ["a", "b"]}, index["s1", "s2"]),varpd.D…

(作业)第三期书生·浦语大模型实战营(十一卷王场)–书生基础岛第3关---浦语提示词工程实践

基础任务 (完成此任务即完成闯关) 背景问题&#xff1a;近期相关研究发现&#xff0c;LLM在对比浮点数字时表现不佳&#xff0c;经验证&#xff0c;internlm2-chat-1.8b (internlm2-chat-7b)也存在这一问题&#xff0c;例如认为13.8<13.11。 任务要求&#xff1a;利用Lang…

[C++]使用纯opencv部署yolov11旋转框目标检测

【官方框架地址】 GitHub - ultralytics/ultralytics: Ultralytics YOLO11 &#x1f680; 【算法介绍】 YOLOv11是一种先进的对象检测算法&#xff0c;它通过单个神经网络实现了快速的物体检测。其中&#xff0c;旋转框检测是YOLOv11的一项重要特性&#xff0c;它可以有效地检…

vulnhub-digitalworld.local DEVELOPMENT靶机

vulnhub&#xff1a;digitalworld.local: DEVELOPMENT ~ VulnHub 导入靶机&#xff0c;放在kali同网段&#xff0c;扫描 靶机在192.168.114.129&#xff0c;扫描端口 开了几个端口&#xff0c;8080端口有网页&#xff0c;访问 说是让访问html_pages 似乎把页面都写出来了&…

FPGA时序分析和约束学习笔记(2、FPGA时序传输模型)

Tclk1TcoTdata < Tclk Tclk2 -Tsu Slack Tskew Tclk - Tsu - Tdata - Tco Skew时钟偏斜&#xff1a;时钟从源端口出发&#xff0c;到达目的寄存器和源寄存器的时间差值&#xff08;Tclk2-Tclk1&#xff09; Tsu建立时间&#xff1a;目的寄存器自身的特性决定&#xff…

掌握RocketMQ4.X消息中间件(一)-RocketMQ基本概念与系统架构

1 MQ介绍 MQ(Message Quene) : 翻译为 消息队列,别名为 消息中间件&#xff0c;通过典型的 生产者和消费者模型,生产者不断向消息队列中生产消息&#xff0c;消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的&#xff0c;而且只关心消息的发送和接收&#xff0c…

动态桌面时钟 让时间在桌面舞动 发现生活中的美好瞬间!

在快节奏的现代生活中&#xff0c;时间是最宝贵的资源之一。无论是在工作还是生活中&#xff0c;我们都需要时刻关注时间&#xff0c;在桌面显示一个时钟&#xff0c;可以让你更方便的掌握时间。今天小编给大家推荐一个软件《芝麻时钟》&#xff08;下载地址&#xff1a;https:…

vulnhub-DC 2靶机

vulnhub&#xff1a;DC: 2 ~ VulnHub 导入靶机&#xff0c;放在kali同网段&#xff0c;扫描 靶机在192.168.81.12&#xff0c;扫描端口 存在网站服务&#xff0c;访问&#xff0c;发现访问不到&#xff0c;做一下详细扫描 似乎是提示我们要用域名dc-2&#xff0c;编辑hosts文件…

(附源码)NodeJS社区独居老人健康管理系统-计算机毕设 21353

NodeJS社区独居老人健康管理系统 摘 要 随着科技的进步&#xff0c;信息技术已经深刻地影响了社会的各个领域。计算机的普及已经成为了不可或缺的一部分&#xff0c;它为我们提供了无限的可能性。 该社区独居老人健康管理系统提供了多种功能&#xff0c;包括查看首页、个人中…

【路径规划】移动机器人在未知环境下目标的路径规划算法

摘要 本文提出了一种新的路径规划算法&#xff0c;适用于在未知环境下的移动机器人。算法旨在帮助机器人从起点移动到目标点&#xff0c;同时避开环境中的障碍物。该算法基于势场方法&#xff0c;但解决了传统算法中常见的局部极小值问题&#xff0c;从而提高了路径规划的成功…

在线教育新篇章:SpringBoot系统开发策略

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

实例分割、语义分割和 SAM(Segment Anything Model)

实例分割、语义分割和 SAM&#xff08;Segment Anything Model&#xff09; 都是图像处理中的重要技术&#xff0c;它们的目标是通过分割图像中的不同对象或区域来帮助识别和分析图像&#xff0c;但它们的工作方式和适用场景各有不同。 1. 语义分割&#xff08;Semantic Segme…

红黑树学习

红黑树: k v 方式 用在哪里&#xff1a; 1.hash 强查找的过程&#xff1a; 1.rbtree 2.hash 3.b/b tree 4.链表 红黑树&#xff1a; 1.每个结点是红的或者是黑的 2.根结点是黑的 3.每个叶子结点是黑的 4.如果一个结点是红的&#xff0c;则它的两个儿子是黑的 5.对每个节点&…

lrzsz串口文件传输

此时如果需要传输文件&#xff0c;需要借助rz/sz工具&#xff0c;可以使用的传输协议有ZMODEM、YMODEM、XMODEM&#xff0c;默认是ZMODEM。 https://en.wikipedia.org/wiki/ZMODEM https://gallium.inria.fr/~doligez/zmodem/zmodem.txt 这里记录item2下使用rz/sz进行文件传输…