上手之Python之异常

news2024/12/19 17:01:56

什么是异常

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

bug单词的诞生 

早期计算机采用大量继电器工作,马克二型计算机就是这样的。 1945年9月9日,下午三点,马克二型计算机无法正常工作了,技术人员试了很多办法,最后定位到第70号继电器出错。负责人哈珀观察这个出错的继电器,发现一只飞蛾躺在中间,已经被继电器打死。她小心地用摄子将蛾子夹出来,用透明胶布帖到“事件记录本”中,并注明“第一个发现虫子的实例。”自此之后,引发软件失效的缺陷,便被称为Bug。

异常演示 

例如:以`r`方式打开一个不存在的文件。

f = open('linux.txt', 'r')

 

异常的捕获方法 

为什么要捕获异常

世界上没有完美的程序,任何程序在运行的过程中,都有可能出现:异常,也就是出现bug 导致程序无法完美运行下去。

我们要做的,不是力求程序完美运行。 而是在力所能及的范围内,对可能出现的bug,进行提前准备、提前处理。

这种行为我们称之为:异常处理(捕获异常)

当我们的程序遇到了BUG, 那么接下来有两种情况:        

① 整个程序因为一个BUG停止运行    

② 对BUG进行提醒, 整个程序继续运行

显然在之前的学习中, 我们所有的程序遇到BUG就会出现①的这种情况, 也就是整个程序直接奔溃. 但是在真实工作中, 我们肯定不能因为一个小的BUG就让整个程序全部奔溃, 也就是我们希望的是达到② 的这种情况 那这里我们就需要使用到捕获异常

捕获异常的作用在于:提前假设某处会出现异常,做好提前准备,当真的出现异常的时候,可以有后续手段。

 捕获常规异常

基本语法:

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

快速入门

需求:尝试以`r`模式打开文件,如果文件不存在,则以`w`方式打开。

try:
    f = open('linux.txt', 'r')
except:
    f = open('linux.txt', 'w')

捕获指定异常 

try:
    print(name)
except NameError as e:
    print('name变量名称未定义错误')

① 如果尝试执行的代码的异常类型和要捕获的异常类型不一致,则无法捕获异常。

② 一般try下方只放一行尝试执行的代码。 

捕获多个异常 

try:
    print(1/0)
except (NameError, ZeroDivisionError):
    print('ZeroDivision错误...')

捕获异常并输出描述信息 

try:
    print(num)
except (NameError, ZeroDivisionError) as e:
    print(e)

 

捕获所有异常 

try:
    print(name)
except Exception as e:
    print(e)

 

异常else 

else表示的是如果没有异常要执行的代码。

try:
    print(1)
except Exception as e:
    print(e)
else:
    print('我是else,是没有异常的时候执行的代码')

 

 异常的finally

finally表示的是无论是否异常都要执行的代码,例如关闭文件。

try:
    f = open('test.txt', 'r')
except Exception as e:
    f = open('test.txt', 'w')
else:
    print('没有异常,真开心')
finally:
    f.close()

异常的传递 

异常是具有传递性的

当函数func01中发生异常, 并且没有捕获处理这个异常的时候, 异常 会传递到函数func02, 当func02也没有捕获处理这个异常的时候 main函数会捕获这个异常,  这就是异常的传递性.

提示:     当所有函数都没有捕获异常的时候, 程序就会报错

 

 

 利用异常具有传递性的特点, 当我们想要保证程序不会因为异常崩溃的时候, 就可以在main函数中设置异常捕获, 由于无论在整个程序哪里发生异常, 最终都 会传递到main函数中, 这样就可以确保所有的异常都会被捕获

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

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

相关文章

【JVM技术专题】 深入学习JIT编译器实现机制「 原理篇」

前提概要 解释器 Java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁的时候,就会把这些代码认定为“热点代码”(hotspot code)。正因为如此,我们的hotspot的虚拟机就是…

将matlab数据导入到Python中使用

相信不少小伙伴都遇到过和我一样的问题,就是在尝试使用scipy.io.loadmat将matlab类型的数据导入python中的时候遇到如下错误提示。 import scipy as sc# 设定需要导入的matlab数据目录 path_TE00 r"D:\Window自带文件夹\桌面\PIC Design\Lumerical\Tutorials…

Apollo GraphQL

一、Apollo GraphQL介绍 Apollo 是一个开源的 GraphQL 开发平台, 提供了符合 GraphQL 规范的服务端和客户端实现。使用 Apollo 可以帮助我们更方便快捷的开发使用 GraphQL。 ● 官网:https://www.apollographql.com/ ● GitHub 相关开源仓库&#xff1a…

Vite+Vue+Electron环境搭建

因为electron可以直接加载html文件,也可以直接加载url链接,所以,我们可以在调试过程中使用url地址,来动态显示我们的改变过程。 electron简单来说就是对html的一种封装,所以我们先来搭建vue的开发环境,这里…

LQ0135 左孩子右兄弟【DFS+二叉树】

题目来源:蓝桥杯2021初赛 C A组H题 题目描述 对于一棵多叉树,我们可以通过“左孩子右兄弟” 表示法,将其转化成一棵二叉树。 如果我们认为每个结点的子结点是无序的,那么得到的二叉树可能不唯一。 换句话说,每个结点可…

并发编程之ForkJoin框架

什么是 Fork/Join 框架 Fork/Join 是从 java7 开始提供的并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务的结果,得到大任务结果的框架. 如下图: Fork/Join 的特性 ForJoinPool 不是为了替代 Execu…

毕业仅1年,干Python赚了50W!网友:不是吹的

前言 惊讶 ​Py现状:Python职位月薪5W起? 其他程序员:心态塌了! 秒杀各行业薪资榜单,拿下编程语言排行榜的Python,工资真的如网上说的开挂了吗?有人在网上发现这样的一条评论信息&#xff1a…

公众号网课查题接口题库

公众号网课查题接口题库 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 题库:题库后台(点击跳转&#xf…

Navicat 现已支持 OceanBase 企业版

近期,PremiumSoft CyberTech Limited 公司发布了 Navicat 16.1.3 版本,正式支持蚂蚁集团旗下的 OceanBase 企业版(MySQL 兼容模式)。此次合作旨在帮助用户通过 Navcicat 进行 OceanBase 企业版的数据库开发及管理,更大…

说说 Redis 事务

Redis 事务简介# Redis 只是提供了简单的事务功能。其本质是一组命令的集合,事务支持一次执行多个命令,在事务执行过程中,会顺序执行队列中的命令,其他客户端提交的命令请求不会插入到本事务执行命令序列中。命令的执行过程是顺序…

MPLS综合实验

目录 实验要求 划分IP地址 首先对MPLSVPN骨干网络进行配置 首先配置IP地址 启动IGP协议 激活MPLS和LDP VRF空间的创建 将接口划入到VRF空间中 R1和R5通过静态路由在CE和PE上配置 建立MP-BGP 对站点R1和R5进行配置 首先把IP给配置好 在VRF空间中发布路由信息 对站点…

2000-2020上市公司全要素生产率LP方法含原始数据和Stata代码

1、时间:2000-2020年 2、指标包括:stkcd、year、证券代码、固定资产净额、营业总收入、营业收入、营业成本、销售费用、管理费用、财务费用、支付给职工以及为职工支付的现金、员工人数、折旧摊销、行业代码、上市日期、AB股交叉码、退市日期、年末是否…

windows下用Java跑通spark官方文档的quick-start

这里写自定义目录标题前置环境官方示例三个小坑maven文件引用不明确未传递master url前置环境 见上一篇:https://blog.csdn.net/shuzip/article/details/115606522 官方示例 https://spark.apache.org/docs/3.1.1/quick-start.html /* SimpleApp.java */ import…

廊坊特色农业 国稻种芯·中国水稻节:河北复合农业促增收

廊坊特色农业 国稻种芯中国水稻节:河北复合农业促增收 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 中国农民丰收节国际贸易促进会 国稻种芯中国水稻节 中国三农智库网-功能性农业农业大健康大会报道:河北廊坊安次区“稻蟹共作”新模式 特色农业…

Codeforces Round #773 (Div. 2)

A. Hard Way 题目链接:Problem - A - Codeforces 样例输入: 5 8 10 10 4 6 2 4 6 0 1 4 2 14 1 11 2 13 2 0 0 4 0 2 4 0 1 1 1 0 0样例输出: 0.0000000 0 2.0000 0.00 1题意:给定一个三角形的三个顶点,输入保证三角…

echarts画各种形状水波图

各种形状水波图 代码 用的是echarts绘制&#xff0c;echarts相关api可以参考echarts官网&#xff0c;形状修改series.shape即可修改形状&#xff0c;这里用的是SVG路径 <html><head><meta charset"utf-8"><link href"https://fonts.google…

jQuery网页开发案例:jQuery常用API--jQuery 尺寸、位置操作及 电梯导航案例和节流阀(互斥锁)

jQuery 尺寸 以上参数为空&#xff0c;则是获取相应值&#xff0c;返回的是数字型。如果参数为数字&#xff0c;则是修改相应值。参数可以不必写单位。这个width方法不包含边框 innerWidth()包含widthpadding 注意这个要大写 outerWidth()包含width padding border outerW…

(JavaSE) 数组

文章目录1. 数组的作用2. 数组的创建及初始化2.1 数组的创建2.2 数组的初始化3. 数组的使用3.1 数组中元素的访问3.2 遍历数组方法4. 数组是引用类型4.1 JVM中的内存有那些4.2 数组如何开辟空间4.3 数组 null 的意思4.4 引用不能同时指向多个对象4.5 数组作为方法返回值5. 二维…

【一键生成】3DMAX配景楼生成插件使用教程

3DMAX室外设计师常常需要创建各种场景配楼&#xff0c;为了解决大场景制作难的情况&#xff0c;3dMax配景楼生成插件是一款傻瓜式的插件或许更能快速让你从繁重的体力劳动中解脱出来&#xff01; 【安装方法】 方法一&#xff1a;拖动插件文件到3dMax窗口。 方法二&#xff1a;…

MySQL 主要线程

文章目录MySQL 主要线程1. Master thread2. io thread3. purge thread4. page Cleaner ThreadMySQL 主要线程 1. Master thread Master thread有四大循环&#xff0c;分别是loop,background loop&#xff0c;suspend loop&#xff0c;flush loop。且四大循环的作用如下: loop…