从C到Py:Python的异常处理

news2025/1/10 1:31:22

本篇文章中我们将简单讲解一下有关Python中的异常处理,既有在代码中有显式表达的异常处理语法,还包括Pycharm手动调试的简单操作。

目录

Python异常处理

1、try-except结构

​编辑 2、try-except-else结构

raise抛出异常

常见异常类型

Pycharm程序调试

第一步:设置断点

第二步:进入调试窗口

第三步:开始调试


Python异常处理

我们先简单看一下Python中的“异常”,比如要得到两个数的商,但输入了一个0作为除数就会出现以下结果:

ZeroDivisionError: division by zero

程序的异常处理就是在原本代码的基础上,加上特定的语句,使得程序一旦报错(且是多种意义的报错),就执行另外的、备用的代码语句。以下是语法格式:

1、try-except结构

try:

        可能异常的代码

except 异常类型:

        异常处理代码(报错后执行)

以及第二种

try:

        可能异常的代码

except 异常类型A:

        异常处理代码(类型A报错后执行)

except 异常类型B:

        异常处理代码(类型B报错后执行)

捕获异常类型的顺序是按照先子类后父类的顺序(子类、父类需要在面向对象的部分介绍),简单来说,我们在编写多个异常类型时,将能捕获的种类最多的异常类型写在最后

这里的异常类型有很多种,我们拿两个数相除的程序来进行演示,对应的可能的异常分别是:被0除,数值输入错误,以及未知异常类型

try:
    num1=int(input('请输入一个整数:'))
    num2=int(input('请输入另一个整数:'))
    result=num1/num2
    print('结果', result)
except ZeroDivisionError:
    print('除数为0')
except ValueError:
    print('不能将字符串转为整数')
except BaseException:
    print('未知异常')

 2、try-except-else结构

try:

        可能异常的代码

except 异常类型:

        异常处理代码(报错后执行)

else:

        没有抛出异常执行的代码

以及第二种写法

try:

        可能异常的代码

except 异常类型:

        异常处理代码(报错后执行)

else:

        没有抛出异常执行的代码

finally:

        无论是否异常都执行的代码

这里在逻辑上就是增加了两个可以执行更多代码的位置,不再作代码示例。

PS:如果在except后不指定异常类型,表示捕获全部异常。

raise抛出异常

使用raise关键字可以抛出一个异常,用以提醒程序出现了异常的情况,使程序可以正确的处理这些情况。

语法结构:

raise [Exception类型(异常描述信息)]

例如输入性别时,输入的不是男也不是女的代码:

try:
    gender=input('请输入您的性别:')
    if gender!='男'and gender!='女':
        raise Exception('性别只能是男或女')
    else:
        print('您的性别是:', gender)
except Exception as e:
    print(e)

另外再看一个输入分数的程序,要求分数必须在0到100之间,否则抛出异常:

try:
    score=int(input('请输入分数:'))
    if 0<=score<=100:
        print('分数:', score)
    else:
        raise Exception('分数不正确')
except Exception as e:
    print(e)

运用同样的逻辑,我们可以编写一个程序来查看三条边的长度能否构成三角形:

try:
    a=int(input('请输入第一条边长:'))
    b=int(input('请输入第二条边长:'))
    c=int(input('请输入第三条边长:'))
    if a+b>c and a+c>b and b+c>a:
        print(f'三角形的边长为:{a},{b},{c}')
    else:
        raise Exception(f'{a}, {b}, {c}, 不能构成三角形')
except Exception as e:
    print(e)

常见异常类型

简单掌握一些常见的异常类型,就已经足够我们使用。

异常类型描述说明

ZeroDivisionError

当除数为0时,引发的异常
IndexError索引超出范围所引发的异常
KeyError字典取值时Key不存在的异常
NameError使用一个没有声明的变量时引发的异常
SyntaxErrorPython中的语法错误
ValueError传入的值错误
AttributeError属性或方法不存在的异常
TypeError类型不合适引发的异常
IndentationError不正确的缩进引发的异常

 

Pycharm程序调试

使用Pycharm可以方便地进行进行代码的调试:下面用一个简单的循环代码来进行演示:

i=1
while i<10:
    print(i)
    i+=1

如果已经对VS等IDE的使用有所了解,那么下面的调试控制方法都将是与C语言中的学习类似的。

第一步:设置断点

在代码每一行的行数的位置,左键或右键——设置断点,都可以在这一行代码处打上断点

 出现红点即设置成功,这是在调试过程中在运行到此行代码则暂停程序的标志。

第二步:进入调试窗口

进入调试窗口有三种方法,一是单击右上方的小虫子(bug)的图标:

二是对代码处单机右键,找到调试的选项(我这里下载了中文包,英文情况下是debug)

三就是快捷键 shift+F9

第三步:开始调试

先认识一下调试窗口的几个功能区块

再是程序控制窗口的介绍:

然后是调试控制窗口:

最后是程序调试窗口:

 

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

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

相关文章

神经网络中常见的激活函数:理解与实践

神经网络中常见的激活函数&#xff1a;理解与实践 在神经网络中&#xff0c;激活函数是一个非常重要的组成部分&#xff0c;它为神经元引入了非线性特性&#xff0c;使得神经网络可以拟合各种复杂的函数关系。本文将介绍9种常见的激活函数&#xff0c;包括它们的概述、公式以及…

安卓中级控件(图形、选择按钮、文本输入、对话框)

图形定制 图形Drawable Android把所有能够显示的图形都抽象为Drawable类&#xff08;可绘制的&#xff09;。这里的图形不止是图片&#xff0c;还包括色块、画板、背景等。 包含图片在内的图形文件放在res目录的各个drawable目录下&#xff0c;其中drawable目录一般保存描述性…

相机知识的补充

一&#xff1a;镜头 1.1MP的概念 相机中MP的意思是指百万像素。MP是mega pixel的缩写。mega意为一百万&#xff0c;mega pixel 指意为100万像素。“像素”是相机感光器件上的感光最小单位。就像是光学相机的感光胶片的银粒一样&#xff0c;记忆在数码相机的“胶片”&#xff…

windows 驱动开发-DMA技术(二)

前面描述了DMA技术中适配器相关的部分以及DMA的分类&#xff0c;接下来看一下系统具体在支持两种DMA时候的操作的细微差别。 此处解释一下Scatter/Gather&#xff0c;这个也翻译为散点/收集&#xff0c;是指指示设备能够读取或写入内存中的任何区域&#xff0c;而不仅仅是特定…

YOLO系列改进,自研模块助力涨点

目录 一、原理 二、代码 三、添加到YOLOv5中 一、原理 论文地址:

LiveCD镜像文件的定制化

最近想要定制化一款属于自己的LiveCD镜像文件&#xff0c;并且里边封装好所需要的软件程序&#xff0c;本文将会记录具体的操作步骤&#xff0c;供有需要的人参考借鉴。 环境说明&#xff1a; 环境配置说明配置参数编码环境Centos7.9LiveCD文件CentOS-7-livecd-x86_64.iso 附…

袁庭新ES系列18节|Spring Data Elasticsearch高级

前言 这一章节袁老师将带领同学们来学习Spring Data Elasticsearch高级操作相关的内容。我们继续来探索SDE是如何将原始操作Elasticsearch的客户端API进行封装的&#xff0c;以及通过Spring Data Elasticsearch如何来操作ES。准备好了吗&#xff1f;我们继续来探索ES的内容。 …

探索AI工具的巅峰:个人体验与深度剖析

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

【Go语言快速上手(六)】管道, 网络编程,反射,用法讲解

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Go语言专栏⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多Go语言知识   &#x1f51d;&#x1f51d; GO快速上手 1. 前言2. 初识管道3. 管…

自定义SpringBoot的starter

案例需求&#xff1a;自定义redis-stater。要求当导入redis坐标时&#xff0c;SpringBoot自动创建Jedis的Bean。 实现步骤&#xff1a; 1、创建redis-spring-boot-autoconfigure模块 2、创建redis-spring-boot-starter模块&#xff0c;依赖redis-spring-boot-autoconfigure的…

Codeforces Round 938 (Div. 3)H-The Most Reckless Defense

来源 题目 You are playing a very popular Tower Defense game called "Runnerfield 2". In this game, the player sets up defensive towers that attack enemies moving from a certain starting point to the players base. You are given a grid of size nm&a…

Delta lake with Java--利用spark sql操作数据2

上一篇文章尝试了建库&#xff0c;建表&#xff0c;插入数据&#xff0c;还差删除和更新&#xff0c;所以在这篇文章补充一下&#xff0c;代码很简单&#xff0c;具体如下&#xff1a; import org.apache.spark.sql.SaveMode; import org.apache.spark.sql.SparkSession;publi…

DRF中的请求入口分析及request对象分析

DRF中的请求入口分析及request对象分析 django restframework框架是在django的基础上又给我们提供了很多方便的功能&#xff0c;让我们可以更便捷基于django开发restful API 1 drf项目 pip install django pip install djangorestframework1.1 核心配置 INSTALLED_APPS [d…

【源码阅读】Golang中的go-sql-driver库源码探究

文章目录 前言一、go-sql-driver/mysql1、驱动注册&#xff1a;sql.Register2、驱动实现&#xff1a;MysqlDriver3、RegisterDialContext 二、总结 前言 在上篇文章中我们知道&#xff0c;database/sql只是提供了驱动相关的接口&#xff0c;并没有相关的具体实现&#xff0c;具…

PG数据库结构与oracle比较

1.数据库集簇逻辑结构 数据库集簇概念&#xff1a;一个大的数据库是由若干个小的数据库组成&#xff0c;实现数据的隔离存放&#xff0c;在概念上应该是与mysql一样的 在mysql中可以用show database列出数据库 PG中用\l 数据库对象存放在数据库中&#xff1a; PG中的所有数据…

Mac 上安装多版本的 JDK 且实现 自由切换

背景 当前电脑上已经安装了 jdk8; 现在再安装 jdk17。 期望 完成 jdk17 的安装&#xff0c;并且完成 环境变量 的配置&#xff0c;实现自由切换。 前置补充知识 jdk 的安装路径 可以通过查看以下目录中的内容&#xff0c;确认当前已经安装的 jdk 版本。 cd /Library/Java/Java…

Maven3.9.6下载安装教程

(/≧▽≦)/~┴┴ 嗨~我叫小奥 ✨✨✨ &#x1f440;&#x1f440;&#x1f440; 个人博客&#xff1a;小奥的博客 &#x1f44d;&#x1f44d;&#x1f44d;&#xff1a;个人CSDN ⭐️⭐️⭐️&#xff1a;Github传送门 &#x1f379; 本人24应届生一枚&#xff0c;技术和水平有…

Typescript精进:前端必备的5大技巧(AI写作)

首先&#xff0c;这篇文章是基于笔尖AI写作进行文章创作的&#xff0c;喜欢的宝子&#xff0c;也可以去体验下&#xff0c;解放双手&#xff0c;上班直接摸鱼~ 按照惯例&#xff0c;先介绍下这款笔尖AI写作&#xff0c;宝子也可以直接下滑跳过看正文~ 笔尖Ai写作&#xff1a;…

瑞_23种设计模式_解释器模式

文章目录 1 解释器模式&#xff08;Interpreter Pattern&#xff09;1.1 介绍1.2 概述1.2.1 文法&#xff08;语法&#xff09;规则1.2.2 抽象语法树 1.3 解释器模式的结构1.4 解释器模式的优缺点1.5 解释器模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代…

【右一的开发日记】全导航,持续更新...

文章目录 &#x1f4da;前端【跟课笔记】&#x1f407;核心技术&#x1f407;高级技术 &#x1f4da;捣鼓捣鼓&#x1f407;小小案例&#x1f407;喵喵大王立大功&#x1f407;TED自用学习辅助网站&#x1f407;世界top2000计算机科学家可视化大屏&#x1f407;基于CBDB的唐代历…