Python学习之路——异常捕获

一、什么是异常

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

二、异常的捕获方法

当我们的程序遇到bug,那么就下来有两种情况

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

②对bug进行提示,整个程序继续运行

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

1、捕获常规异常

(一)基本语法

try:

        可能发生错误的代码

except:

        如果出现异常执行的代码

 (二)快速入门

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

try:

        f = open('python.txt', 'r, encoding = 'utf-8')

except:

        f = open('python.txt', 'w, encoding = 'utf-8')

2、捕获指定异常

try:

        print(1 / 0)

except NameError as a:

        print(f'出现变量名称异常:{a}')

except ZeroDivisionError as b:

        print(f'出现^异常:{b}')

3、捕获多个异常

try:

        # print(name)

        1 / 0

except (NameError, ZeroDivisionError) as a:

        print(f'捕获到的异常是:{a}') 

4、捕获全部异常

# 两种一样的写法,都可以捕获到全部异常

# 第一种方式

# try:

#

# except:

# 第二种方式

try:

        # print(name)

        1 / 0

except Exception as a:

        print(f'出现异常了:{a}')

5、异常else/finally:

(这两个参数是可选的)

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

name = 'hello'
try:
    print(name)
except Exception as a:
    print(f'出现异常了,且为{a}类型')
    # finally一般用在文件的相关操作中,因为不管怎么最后都要关闭文件
finally:
    print('hello,不管怎样我都会在的')

三、异常具有传递性

1、怎么理解呢

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

需要注意的是:

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

程序结果:

2、代码示例

# 定义一个出现异常的函数
def func01():
    print('这是func01函数的起始')
    print(name)
    print('这是func01函数的结束')


# 定义一个不会出现异常的函数
def func02():
    print('这是func02函数的起始')
    func01()
    num = 1 / 0
    print('这是func02函数的结束')


# 定义一个函数调用上面的函数
def main():
    print('main函数开始执行')
    try:
        func02()
    except Exception as a:
        print(f'出现异常了,并且异常为:{a}')
    finally:
        print('我一直都在')
    print('main函数执行完毕')


if __name__ == '__main__':
    main()

程序执行结果:

从程序的执行结果可以看出

①执行的是main函数

②进入函数func02

③进入函数func01

④由于函数func01中出现了错误,导致并非正常退出函数,而是中断函数

⑤执行finally

⑥输出最后一个print语句

四、总结

干货可能不多,但是的确不难,异常可以提高程序的健壮性,还是可以在之后自己开发的程序中加入异常捕获的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

cpp多线程(二)——对线程的控制和锁的概念

这篇文章是笔者学习cpp多线程操作的第二篇笔记,没有阅读过第一篇的读者可以移步此处: Cpp多线程(一)-CSDN博客 如果读者发现我的文章里有问题,欢迎交流哈! 一、如何控制线程呢? c11在std:…

PBR材质背光面太暗优化

图形学中漫反射光照遵循兰伯特光照模型,它的公式如下 其中: :漫反射光颜色 :入射光颜色 :材质的漫反射系数 :法线方向 :光源方向 由于背光面的法线方向和光源方向的点积为负数,因此…

操作系统课程设计-Windows 线程的互斥和同步

目录 前言 1 实验题目 2 实验目的 3 实验内容 3.1 步骤 3.2 关键代码 3.2.1 创建生产者和消费者进程 3.2.2 生产者和消费者进程 4 实验结果与分析 5 代码 前言 本实验为课设内容,博客内容为部分报告内容,仅为大家提供参考,请勿直接抄…

python PyQt5的学习

一、安装与配置 1、环境: python3.7 2、相关模块 pip install pyqt5 pyqt5-tools pyqt5designer 可以加个镜像 -i https://pypi.tuna.tsinghua.edu.cn/simple3、配置设计器 python的pyqt5提供了一个设计器,便于ui的设计 界面是这样的&#xff1a…

MySQL三大日志

1. redo log 1.1 特点 InnoDB存储引擎独有物理日志,记录在数据页上做的修改让MySQL拥有了崩溃恢复能力,保证事务的持久性 1.2 刷盘时机 事务提交时log buffer 空间使用大约一半时事务日志缓冲区满InnoDB 定期执行检查点Checkpoint后台刷新线程&#…

网工内推 | 运维工程师,最高10K*15薪,思科认证优先

01 乐歌股份 招聘岗位:服务器运维工程师 职责描述: 1、负责公司云上云下所有服务器的日常运维工作,包括应用部署、巡检、备份、日志、监控,故障处理,性能优化等,保障公司相关系统稳定运行。 2、为开发、测…

SMART PLC 模拟量批量转换功能块“Multi_ITR“

模拟量输入转换功能块S_ITR详细公式和代码介绍请查看下面文章链接: https://rxxw-control.blog.csdn.net/article/details/121347697https://rxxw-control.blog.csdn.net/article/details/121347697Smart PLC指针和FOR循环组合应用 https://rxxw-control.blog.csdn.net/arti…

go实现判断20000数据范围内哪些是素数(只能被1和它本身整除的数),采用多协程和管道实现

实现一个并发程序,用于寻找 20000 以内的所有素数。使用了 Goroutines 和 Channels 来分发和处理任务,并通过 WaitGroup(实现为 exitChan)来同步 Goroutines 的退出。 一.GO代码 package mainimport ("fmt""time…

捍卫中华数学产权系列6.Σ1/n的分级通式与对应的求和公式

调和级数Σ1/n在欧系数学是极为重要的概念,它是纯粹数学的七寸、关乎欧系数学的存废。然而欧洲人对Σ1/n从来没有发现任意一个求和公式。本人以简单而充分的逻辑给Σ1/n进行了多种多样的分级、并给出了各自对应的求和公式,所以,一切关于调和级…

vue+elementui实现12个日历平铺,初始化工作日,并且可点击

<template><div class"app-container"><el-form :model"queryParams" ref"queryForm" size"small" :inline"true"><el-form-item label"年份" prop"holidayYear"><el-date-…

Verilog基础:强度建模(一)

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 一、强度建模基础 Verilog HDL提供了针对线网信号0、1、x、z的精准强度建模方式&#xff0c;这样可以允许将两个线网信号进行线与操作从而更加精确地描述出硬件行…

string 模拟实现

string的数据结构 char* _str; size_t _size; size_t _capacity; _str 是用来存储字符串的数组&#xff0c;采用new在堆上开辟空间&#xff1b; _size 是用来表示字符串的长度&#xff0c;数组大小strlen(_str)&#xff1b; _capacity 是用来表示_str的空间大小, _capacity…

使用 Postman 发送 get 请求的简易教程

在API开发与测试的场景中&#xff0c;Postman 是一种普遍应用的工具&#xff0c;它极大地简化了发送和接收HTTP请求的流程。要发出GET请求&#xff0c;用户只需设定正确的参数并点击发送即可。 如何使用 Postman 发送一个GET请求 创建一个新请求并将类型设为 GET 首先&#…

余承东发声!预测:2024年,鸿蒙OS将取代苹果iOS…

半导体行业观察机构Techinsights&#xff0c;1月3日发布报告预测&#xff1b;从2024年起&#xff0c;鸿蒙Harmony OS将取代苹果iOS&#xff0c;成为中国市场上第二大智能手机操作系统。 TechInsights预测&#xff0c;2024年全球智能手机销量将同比反弹3%。华为手机在2024年将坚…

基于Harris角点的多视角图像全景拼接算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 Harris角点检测 4.2 图像配准 4.3 图像变换和拼接 4.4 全景图像优化 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 function [ImageB…

k8s---ingress对外服务(ingress-controller)

ingress 概念 k8s的对外服务&#xff0c;ingress service作用现在两个方面&#xff1a; 1、集群内部&#xff1a;不断跟踪的变化&#xff0c;更新endpoint中的pod对象&#xff0c;基于pod的ip地址不断变化的一种服务发现机制。 2、集群外部&#xff1a;类似于负载均衡器&a…

如何在Linux运行RStudio Server并实现Web浏览器远程访问

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 前言1. 安装RStudio Server2. 本地访问3. Linux 安装cpolar4. 配置RStudio server公网访问地址5. …

Linux系统编程(二)文件IO/系统调用IO

一、IO 简介 I/O 是一切实现的基础&#xff1a; 标准 IO&#xff08;stdio&#xff09;&#xff1b;系统调用 IO&#xff08;sysio&#xff0c;文件IO&#xff09;&#xff1b; 不同系统上的系统调用 IO 的使用方式可能不一样&#xff0c;为了隐藏不同系统上的细节&#xff…

mysql 为大表新增字段或索引

1 问题 mysql 为大表增加或增加索引等操作时&#xff0c;直接操作原表可能会因为执行超时而导致失败。解决办法如下。 2 解决办法 &#xff08;1&#xff09;建新表-复制表A 的数据结构&#xff0c;不复制数据 create table B like A; &#xff08;2&#xff09;加字段或索…

使用muduo库编写网络server端

muduo库源码编译安装和环境搭建 C muduo网络库知识分享01 - Linux平台下muduo网络库源码编译安装-CSDN博客 #include<iostream> #include<muduo/net/TcpServer.h> #include<muduo/net/EventLoop.h> using namespace std; using namespace muduo; using name…