Python的错误和异常处理

一、错误和异常

    编程中出现的错误大致可以分为两类:错误和异常。

(一)错误

    错误又可以分为两类:语法错误和逻辑错误。

1. 语法错误

    语法错误又称解析错误,它是指在编写程序时,程序的语法不符合Python语言的规范,导致程序无法被正确解析。这种错误通常由拼写错误、缺少冒号、括号不配对、语句以及引号等引起。

    例1 表达式括号不配对引发的语法错误。

图1 SyntaxError错误用例图

    例1中,第一行中是括号不配对,第二行变量名为关键词,引发SyntaxError。

    另外一切在编完程序到可以运行(通过编译),或者说通过编译之前发生的错误都归结到这里。

    例2 变量未定义就用于计算。

图1 NameError用例图

    例2中,s += i,相当于s = s + i,变量s没有定义,导致s += i无法执行,引发NameError。

    语法错误容易发现,改正前程序不能正常运行,系统会提供错误位置、错误类型和错误原因,用户可能根据这些信息修改错误。

2. 逻辑错误

    逻辑错误是指程序的逻辑不正确,导致程序无法按照用户期望的方式执行,或程序的算法不符合题目给出的逻辑。

    存在逻辑错误程序可以正常运行,但运行结果不正确。这种错误通常是由编程者的错误推理或理解偏差等引起的。比如已知三边求三角形面积,但程序却求的是周长等。

    例3 求闰年。如果年份能被4整除,但不能被100整除,那么这一年就是闰年。 如果年份能被100整除,但同时也能被400整除,那么这一年也是闰年。

   

    程序可以正常运行,但逻辑关系中的逻辑运算符用错,导致结果不正确。如只不能被100整除都将输出“闰年”。逻辑正确的程序如下:

 (二)异常

    异常也称运行时错误,是指在程序语法和逻辑都没有错误的情况下,程序在运行时出现的错误,这种错误可能是由于编程者的疏忽、系统资源不足或者外部因素引起的。常见的运行时错误有除零错误、索引错误、名称错误、输入/输出错误等。大多数异常不会被程序处理,从而导致程序中断,抛出错误。

    例4:两整数除法。

    正常输入,如输入6和4,程序正常输出“6÷4=1.5”,如图2(a)所示;当输入字母,如r,程序会抛出“ValueError”错误,如图2(b)所示;当输入带小数点的数,如45.5,程序也会抛出“ValueError”错误,如图2(c)所示。

图2 例4异常类型

    因此可以根据异常类型,结合出错原因,说明错误细节等进行异常的拦截与处理。

 ()异常的处理

    常见内置异常码见表1,表中列出了内置异常码及其含义(描述)

1 常见内置异常码表

    可以编写程序处理选定的异常。例5会要求用户一直输入内容,直到输入有效的整数。

    例5 输入一个整数,直到输入正确为止。

    当输入不正确会进入异常处理,输入正确会break跳出“死”循环。

1. Python异常处理

    在 Python 中,可以使用 try... except... else...finally 的方式来捕获异常并进行处理。其语法格式如下:

try:正常的操作    # 可能出现异常的代码块
except [异常类型]:发生异常,执行这块代码      # 如果在try部份引发了'异常类型'异常
except [异常类型,数据]:发生异常,执行这块代码      # 如果引发了'异常类型'异常,获得附加的数据
except[异常类型]:发生异常,执行这块代码
else:如果没有异常执行这块代码
finally:无论是否发生异常都将执行最后的代码

    其中,try 语句块中的代码可能会出现异常,如果出现了指定类型的异常 ExceptionName,就会执行相应的 except 子句中的代码块。如果没有出现异常,那么except子句不会执行,但会执行else子句中的代码块。而 finally 子句中的代码块无论如何都会在 try except 块执行完之后执行。

    例5 除数0的异常:

try:num1 = int(input('请输入第1个数:'))num2 = int(input('请输入第2个数:'))print(num1 / num2)
except ZeroDivisionError:print('第2个数不能为0!')

    可拦截除零,但不能拦截非法输入。

    多个except子句

try:num1 = int(input('请输入第1个数:'))num2 = int(input('请输入第2个数:'))print(num1 / num2)
except ValueError:print('请输入数字!')
except ZeroDivisionError:print('第2个数不能为0!')

   既可以拦截除零,也可以拦截非法输入。

   还可以不给except参数,空except捕捉所有异常,但区分不了异常。

try:num1 = int(input('请输入第1个数:'))num2 = int(input('请输入第2个数:'))print(num1 / num2)
except:print('出了问题!')

    as语句捕捉异常原因。

try:num1 = int(input('请输入第1个数:'))num2 = int(input('请输入第2个数:'))print(num1 / num2)
except Exception as err:print('出了问题!')print(err)      # 输出异常原因

    也可以将多个异常码元组作为except参数,一个except块捕捉多个异常。

try:num1 = int(input('请输入第1个数:'))num2 = int(input('请输入第2个数:'))print(num1 / num2)
except (ValueError, ZeroDivisionError):print('无效输入!')

 (四)触发异常

    raise语句支持强制触发指定的异常。例如:

    raise 唯一的参数就是要触发的异常。这个参数必须是异常实例或异常类(派生自 BaseException 类,例如 Exception 或其子类)

(五)用户自定义异常

    程序可以通过创建新的异常类命名自定义的异常。不论是以直接还是间接的方式,异常都应从Exception
类派生。

    异常类可以被定义成能做其他类所能做的任何事,但通常应当保持简单,它往往只提供一些属性,允许相应的异常处理程序提取有关错误的信息。

    一般异常命名都以 “Error” 结尾,类似标准异常的命名。本例命名为“CustomException”。

    许多标准模块定义了自己的异常,以报告他们定义的函数中可能出现的错误。

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

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

相关文章

广告行业中那些趣事系列65:使用chatgpt编写基金定投程序

导读:本文是“数据拾光者”专栏的第六十五篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践。本篇介绍了prompt生成器和使用chatgpt来编写一个基金定投程序,对于希望使用chatgpt提升工作效率,尤其是对投资基金感兴趣…

【微服务 Spring Cloud Alibaba】- Nacos 服务注册中心

目录 1. 什么是注册中心? 1.2 注册中心的作用 2. SpringBoot 整合 Nacos 实现服务注册中心 2.1 将服务注册到 Nacos 2.2 实现消费者 3. 服务列表各个参数的含义、作用以及应用场景 1. 什么是注册中心? 注册中心是微服务架构中的一个重要组件&…

数模竞赛那么累,究竟能给我带来什么?

国赛官网上有这么一句话:一次参赛,终生受益。 学生时代,我对这句话没啥感触。 因为刚开始学数模时感觉很没头绪,书也看不懂,论文也看不懂,看啥都看不懂。 比赛时题目看不懂,答案搜不到&#xf…

数据资产入表来了!企业如何构建数据资产

背景 2023年8月21日,财政部会计司公布《企业数据资源相关会计处理暂行规定》(财会〔2023〕11号)(以下简称“《暂定规定》”),“数据资产入表”正式来了,为企业构建数据资产体系吹响号角&#x…

【接口测试】目前市面上流行的接口大多有哪几种协议的接口?

首先,关于协议这个词,你要清楚。 接口测试它是基于什么进行测试的,接口测试是什么测试类型,其实有有时候问到一个问题,关联性很强。很多关联性的问题你都可以去考虑。 首先接口测试一个功能黑盒测试&后端&#x…

go-gin-vue3-elementPlus带参手动上传文件

文章目录 一. 总体代码流程1.1 全局Axios部分样例1.2 上传业务 二. 后端部分三. 测试样例 go的mvc层使用gin框架. 总的来说gin的formFile封装的不如springboot的好.获取值有很多的坑. 当然使用axios的formData也有不少坑.现给出较好的解决办法 以下部分仅贴出关键代码 一. 总…

5分+肿瘤预后模型生信分析如何做?单细胞分析+干湿结合

今天给同学们分享一篇单细胞分析干湿结合的生信文章“Tumor-associated endothelial cell prognostic risk model and tumor immune environment modulation in liver cancer based on single-cell and bulk RNA sequencing: Experimental verification”,这篇文章于…

企业通过ISO/IEC 27001的必要性阐述

文章目录 什么是ISO 27001?ISO 27001认证的必要性1,保护信息资产2,合规性要求3,提高客户信任4,降低安全风险5,提高内部效率6,改进供应链安全7,提高员工意识8,连续改进 推荐阅读 什么…

【Unity】Addressables资源管理笔记

【Unity】Addressables资源管理笔记 Addressables是一种用于管理资源的系统。允许以一种灵活的方式加载、卸载和管理资源,无论是场景、预制件、材质、纹理、音频剪辑等。 一、快速实现 安装Addressables插件 把对象添加到组 1)打开AddressablesGroups面…

GB28181协议如何注册

前言 GB28181协议是视频监控领域的国家标准,本文将解析如何在FFmpeg中增加对GB28181协议的支持,使其可以与支持GB28181协议的设备进行通信与控制,实现设备的注册、保活以及流媒体的传输。 1.背景介绍 GB28181协议指的是国家标准GB/T 28181…

自定义类型结构体(上)

目录 结构体类型的声明结构体的概念结构体的声明特殊的声明结构的自引用 结构体变量的创建和初始化结构成员访问操作符 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒 个人主页 🥸🥸&#x1…

2023年【R1快开门式压力容器操作】报名考试及R1快开门式压力容器操作实操考试视频

题库来源:安全生产模拟考试一点通公众号小程序 R1快开门式压力容器操作报名考试是安全生产模拟考试一点通总题库中生成的一套R1快开门式压力容器操作实操考试视频,安全生产模拟考试一点通上R1快开门式压力容器操作作业手机同步练习。2023年【R1快开门式…

BurpSuite超详细安装教程-功能概述-配置-使用教程---(附下载链接)

一、介绍 BurpSuite是渗透测试、漏洞挖掘以及Web应用程序测试的最佳工具之一,是一款用于攻击web 应用程序的集成攻击测试平台,可以进行抓包、重放、爆破,包含许多工具,能处理对应的HTTP消息、持久性、认证、代理、日志、警报。 二…

Windows11无法打开Photoshop CC 2017问题解决

情况描述: Windows11上,双击Photoshop CC 2017没反应 解决办法: 此时需要启动Windows的“事件查看器”来确认问题出在哪里。可以直接通过开始菜单搜索启动,也可以通过右键点击“此电脑”->“管理”,然后找到事件查…

java基础+数据库基础+系统+JVM问题

的哎的哎 1、基础部分 java线程池 队列的选择 答&#xff1a; SingleThreadPool:适用于多个任务顺序执行的场景。 它使用的是LinkedBlockingQueue<>()&#xff0c;无界的阻塞队列&#xff0c;就意味着会有内存溢出的风险。 FixedThreadPool: 适用于任务量固定耗时长的…

Find My移动硬盘|苹果Find My技术与移动硬盘结合,智能防丢,全球定位

当今已经是数据的时代&#xff0c;各种东西需要保存下来的很多&#xff0c;电脑、手机等设备更换频率也快&#xff0c;确实每个人都需要一个自己的"数据库"&#xff0c;而移动硬盘无疑是最有性价比、最简单使用的选择。移动硬盘一直是我们生活中不可或缺的存储工具&a…

DevChat:VSCode中基于大模型的AI智能编程助手

#AI编程助手哪家好&#xff1f;DevChat“真”好用# 文章目录 1. 前言2. 安装2.1 注册新用户2.2 在VSCode中安装DevChat插件2.3 设置Access Key 3. 实战使用4. 总结 1. 前言 DevChat是由Merico公司精心打造的AI智能编程助手。它利用了最先进的大语言模型技术&#xff0c;像人类…

IDEA在service面板中不显示微服务的项目

在.idea文件夹下的workspace文件中的project标签内添加如下代码段&#xff0c;&#xff0c;重启idea即可看到所有服务出现在了service面板中 <component name"RunDashboard"><option name"configurationTypes"><set><option value&q…

干货来袭 只需套用模板就能制作的电子相册的网站

随着科技的不断发展&#xff0c;电子相册已经成为了我们生活中不可或缺的一部分。但是&#xff0c;制作电子相册的过程却往往让人感到头疼。那么&#xff0c;有没有一种简单易用的方法来制作电子相册呢&#xff1f;今天&#xff0c;就给大家介绍一款只需套用模板就能制作的电子…

opencv c++ canny 实现 以及与halcon canny的对比

Opencv和C实现canny边缘检测_opencv边缘增强-CSDN博客 一、canny实现步骤 1、图像必须是单通道的&#xff0c;也就是说必须是灰度图像 2、图像进行高斯滤波&#xff0c;去掉噪点 3、sobel 算子过程的实现&#xff0c;计算x y方向 、梯度&#xff08;用不到&#xff0c;但是…