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 finally 子句都不会执行,但会执行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.rhkb.cn/news/175920.html

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

相关文章

【Python百练——第2练】使用Python做一个猜数字小游戏

💐作者:insist-- 💐个人主页:insist-- 的个人主页 理想主义的花,最终会盛开在浪漫主义的土壤里,我们的热情永远不会熄灭,在现实平凡中,我们终将上岸,阳光万里 ❤️欢迎点…

Pycharm 搭建 Django 项目,看完这一篇就够了

1. 安装需求 在使用 python 框架 Django 需要注意下面事项 Pycharm 版本是专业版而不是社区版本Pycharm 配置好了 python 解释器 (一般我们现在用的都是python3)我自己使用的是 Pycharm 版本是2020.1.2 2. 准备工作 2.1 新建项目 首先我们打开 Pycharm …

超融合数据库:解锁全场景数据价值的钥匙

前言 近日,四维纵横对外官宣已完成上亿元 B 轮融资。作为超融合数据库理念的提出者,三年来 YMatrix 持续在超融合数据库领域中保持精进与迭代,对于超融合数据库在行业、场景中的应用和理解也更为深刻。 本篇文章,我们将基于 YMa…

【Linux】常见指令以及具体其使用场景

君兮_的个人主页 即使走的再远,也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们,这里是君兮_,随着博主的学习,博主掌握的技能也越来越多,今天又根据最近的学习开设一个新的专栏——Linux,相信Linux操作系…

window11最新版终于可以取消任务栏合并了

windows11一个软件开了多个窗口之后,会自动合并任务栏,很不方便选择其中一个窗口,且没有选项能关闭这一配置 今日发现,最新版完善了这一功能,现在可以关闭自动合并任务栏了 右击任务栏,选择任务栏设置选择…

element表格自定义筛选

文章目录 前言一、简介二、效果展示三、源码总结 前言 提示:这里可以添加本文要记录的大概内容: …待续 提示:以下是本篇文章正文内容,下面案例可供参考 一、简介 修改el-table的筛选…待续 二、效果展示 三、源码 使用方法…

Python爬虫程序中的504错误:原因、常见场景和解决方法

概述 在编写Python爬虫程序时,我们经常会遇到各种错误和异常。其中,504错误是一种常见的网络错误,它表示网关超时。是指客户端与服务器之间的网关通信过程中,服务器在规定的时间内没有返回响应,导致请求超时。此类错误…

【Qt控件之QMessageBox】详解

Qt控件之QMessageBox 描述基于属性的API富文本和文本格式属性严重程度以及图标和Pixmap属性静态函数API 高级用法默认按钮和退出按钮示例使用场景 描述 QMessageBox类提供了一个模态对话框,用于通知用户或向用户提问并接收答案。 消息框显示一个主要文本以提醒用户…

从小白到精通:揭秘perf工具的全部功能与操作技巧

揭秘perf工具的全部功能与操作技巧 一、引言二、理解perf工具的基本概念三、安装与配置perf工具3.1、不同操作系统的perf工具安装3.2、perf工具的配置选项和环境设置 四、perf工具的常用命令和功能4.1、perf工具的基本命令结构和常用参数4.2、perf工具的常见用法和功能4.3、per…

解决恶意IP地址攻击:保卫网络安全的有效方法

随着互联网的发展,网络安全威胁变得日益复杂,其中包括恶意IP地址攻击。这些攻击通常是网络犯罪分子的手段之一,用于入侵系统、窃取数据或进行其他恶意活动。本文将探讨如何解决恶意IP地址攻击,以保护网络安全。 恶意IP地址攻击是…

关于测试组件junit切换testng的示例以及切换方式分享

文章目录 概要首先看看junit和testng的区别实践篇摸拟业务逻辑代码简单对象数据层摸拟类业务逻辑层摸拟类后台任务摸拟类 基于springmockjunit基于springmocktestng 示例的差异点junit与testng的主要变动不大,有以下几个点需要注意注解部分在before,after中testng多出按配置执行…

华为数通方向HCIP-DataCom H12-831题库(多选题:101-120)

第101题 LSR对收到的标签进行保留,且保留方式有多种,那么以下关于LDP标签保留一自由方式的说法 A、保留邻居发送来的所有标签 B、需要更多的内存和标签空间 C、只保留来自下一跳邻居的标签,丢弃所有非下一跳铃邻居发来的标签 D、节省内存和标签空间 E、当IP路由收敛、下一跳…

verilog语言学习

1. 时延 2. 一位全加器设计:三种建模方式 实际的设计中往往是这三种设计模式的混合 3. 4. 5. 6. 7. 建立模型时信号的连接(重点) 8. initial语句 9. always语句 在always中不能同时判断同一个信号的上升沿(posedge&#xff0…

简单明了!网关Gateway路由配置filters实现路径重写及对应正则表达式的解析

问题背景: 前端需要发送一个这样的请求,但出现404 首先解析请求的变化: http://www.51xuecheng.cn/api/checkcode/pic 1.请求先打在nginx,www.51xuecheng.cn/api/checkcode/pic部分匹配到了之后会转发给网关进行处理变成localho…

软件测试之BUG篇(定义,创建,等级,生命周期)

目录 1. BUG 的定义 2. 如何创建 BUG 3. BUG 等级 4. BUG 生命周期 高频面试题: 1. BUG 的定义 当且仅当产品规格书存在且正确时,程序的实现和规格书的要求不匹配时,那就是软件错误。当产品规格说明书没有提到的功能时,以用户…

如何使用drawio画流程图以及导入导出

画一个基本的流程图 你可以在线使用drawio, 或者drawon创建很多不同类型的图表。 如何使用编辑器,让我们以一个最基本的流程图开始。 流程图,就是让你可视化的描述一个过程或者系统。 图形和很少部分的文字表达就可以让读者很快的理解他们需要什么。 创…

如何看待2023年大量劝入C++?

如何看待2023年大量劝入C? 这一段陆陆续续很多人关注这个话题,想提醒大家,c真的很看重领域行业经验,在这里,c只是个工具,相反是这个行业的知识更重要, 最近很多小伙伴找我,说想要一…

制作一个简单的C语言词法分析程序

1.分析组成 C语言的程序中,有很单词多符号和保留字。一些单词符号还有对应的左线性文法。所以我们需要先做出一个单词字符表,给出对应的识别码,然后跟据对应的表格来写出程序 2.程序设计 程序主要有循环判断构成。不需推理即可产生的符号我…

【机器学习可解释性】4.SHAP 值

机器学习可解释性 1.模型洞察的价值2.特征重要性排列3.部分依赖图4.SHAP 值5.SHAP值的高级使用 正文 理解各自特征的预测结果? 介绍 您已经看到(并使用)了从机器学习模型中提取一般解释技术。但是,如果你想要打破模型对单个预测的工作原理? SHAP 值…

大促期间如何应对低价链接

一年一度的大促双十一即将来临,品牌商、经销商在忙着出货,消费者也在积极比价,大促最直观的感觉就是价格,没有低价的大促是没有意义的,所以品牌要管的不是低价产品,而是在不受规则下的低价行为。 力维网络有…