95. Python基础教程:异常处理try...except语句

news2024/11/15 21:45:08

【目录】

文章目录

    • 1. try...except语法解析
    • 2. 程序异常
    • 3. except的4种使用方式
      • 3.1 单独的except
      • 3.2 except + 异常名称
      • 3.3 except 异常类型 as 别名
      • 3.4 except (异常类型1,异常类型2) as 别名
    • 4. 总结

【正文】

1. try…except语法解析

try[traɪ]:尝试。

except[ɪkˈsept]:把…排除在外。

try...except语句是Python中的异常处理机制,用于捕获和处理异常。

【作用】

在程序发生异常时执行特定的代码块,以避免程序崩溃或产生不可预料的结果。

【语法】

try:
    block1
except ExceptionName as alias:
    block1

block[blɒk]:代码块。

ExceptionName:异常名称。

as:作为,如同。

alias [ˈeɪlɪəs]:别名。

tryexcept是关键字。

注意关键字后面需要跟英文冒号:

注意英文冒号:后面的代码块需要有4个空格的缩进。

【参数说明】

  • block1:表示可能出现错误的代码块。

  • ExceptionName :可选参数,代表用户要捕获的异常名称。

  • as alias可选参数,表示给前面的的异常指定一个别名,alias代表别名。

  • 如果在ExceptionName右侧加上as alias,则表示为当前的异常指定一个别名,通过该别名,可以记录异常的具体内容。

  • block2:表示进行异常处理的代码块。这里可以输出固定的提示信息,也可以通过别名输出异常的具体内容。

【温馨提示】

在使用try...except语句捕获异常后,当程序出错时,输出错误信息后,程序会继续执行。

【语法框架1】

try:
    # 可能会发生异常的代码块
except :
    # 处理异常类型的代码块(可以是提示性语句)

【语法框架2】

try:
    # 可能会发生异常的代码块
except 异常名称 :
    # 处理异常类型的代码块(可以是提示性语句)

【语法框架3】

try:
    # 可能会发生异常的代码块
except 异常类型 as 别名:
    # 输出异常的具体内容
    print(别名)

【语法框架4】

try:
    # 可能会发生异常的代码块
except (异常类型1,异常类型2,异常类型3) as 别名:
    # 输出异常的具体内容
    print(别名) 

可能会发生异常的代码块如果存在多个异常情况时,在except语句后面使用一对英文圆括号( )将可能出现的异常名称括起来,多个异常名称之间使用英文逗号,分隔。

2. 程序异常

编程中程序不能正常运行的原因通常有2种:

  • 一是程序有语法错误。

  • 二是程序语法没有问题,但使用者操作不当或输入的数据不符合要求。

下面这段代码的作用是接收用户输入的两个整数,并输出它们相除得到的结果。

【代码示例】

# input接收到的数据为字符串类型,需要用int函数将其转换成整数类
a = int (input("请输入第1个整数:"))
b = int (input("请输入第2个整数:"))
# 计算a除以b
result = a/b
print("结果为:",result)

【终端输出】

结果为: 0.5

操作者输入正常时,终端显示的结果如下图所示:

在这里插入图片描述

我粗心大意在终端输入时,给第2个整数b输入的值为0,终端显示的结果如下图所示:

在这里插入图片描述

大家注意这段代码是没有语法错误的,报错是因为给变量b赋的值为0。

【报错提示】

File "D:\安迪笔记\1.基础语法\95-异常\95.py", line 5, in <module>
result = a/b
ZeroDivisionError: division by zero

运行代码,程序报 ZeroDivisionError: division by zero 这个错误。

  • line 5表示第5行代码有错误。

  • ZeroDivisionError是一个异常的名称,除数为0时会引发该错误。

  • division by zero表示被零除

ZeroDivisionError是一个Python的异常,用于表示除法运算中出现除数为零的情况。

当我们在程序中执行除法运算时,如果除数为零,就会抛出ZeroDivisionError异常。

这个异常的出现通常是由于代码逻辑错误或者错误的输入导致的。

上面的代码报错就是属于使用者操作不当或输入的数据不符合要求导致的程序异常。

出现这样的报错,我们可以使用Python提供的异常处理机制。

可以用try...except语句捕获出现的异常,让程序继续运行。

except的有4种使用方式,我们依次来看。

3. except的4种使用方式

3.1 单独的except

try的意思是尝试,我们把可能出现异常的代码放到try中,注意try后面有英文冒号:,冒号后有4个空格的缩进。

try :
    # input接收到的数据为字符串类型,需要用int函数将其转换成整数类
    a = int (input("请输入第1个整数:"))
    b = int (input("请输入第2个整数:"))
    # 计算a除以b
    result = a/b
    print("结果为:",result)

如果try后面的代码没有问题,则程序正常输出结果。

如果try后面的代码出现异常,则程序执行except后面的代码。

except后面接进行异常处理的代码块。

【代码示例】

try :
    # input接收到的数据为字符串类型,需要用int函数将其转换成整数类
    a = int (input("请输入第1个整数:"))
    b = int (input("请输入第2个整数:"))
    # 计算a除以b
    result = a/b
    print("结果为:",result)
except :
    print("输入有问题,程序不能正常输出结果。")

【终端输出】

在这里插入图片描述

第1种情形是except后面什么参数也不加,回车后跟上一句提示性语句,这句语句你可以结合实际随意编写。

print("输入有问题,程序不能正常输出结果。")该语句是一句提示信息,在这里它就是进行异常处理的代码块。

3.2 except + 异常名称

【代码示例】

try :
    # input接收到的数据为字符串类型,需要用int函数将其转换成整数类
    a = int (input("请输入第1个整数:"))
    b = int (input("请输入第2个整数:"))
    # 计算a除以b
    result = a/b
    print("结果为:",result)
except ZeroDivisionError:
    print("输入有问题,程序不能正常输出结果。")

【终端输出】

在这里插入图片描述

except ZeroDivisionError:

第2种情形是except后面加上ZeroDivisionError

ZeroDivisionError是一个异常名称,编写其它程序时这里需要根据实际情况替换成其它的异常名称。

Python中的异常名称有固定的写法,后面会学。

观察上述2种情况的输出结果,发现有没有异常名称输出的结果都是一样的。

但对于程序员来说有异常名称可以有一个提醒的作用。

3.3 except 异常类型 as 别名

【代码示例】

try :
    # input接收到的数据为字符串类型,需要用int函数将其转换成整数类
    a = int (input("请输入第1个整数:"))
    b = int (input("请输入第2个整数:"))
    # 计算a除以b
    result = a/b
    print("结果为:",result)
except ZeroDivisionError as e:
    print(e)

【终端输出】

在这里插入图片描述

except ZeroDivisionError as e:
    print(e)
  • except是关键字。

  • ZeroDivisionError是异常名称,这里可以替换成你觉得会发生的异常名称。

  • as是关键字,不能更改。

  • e是别名,它记录了异常的具体内容,这里的e你可以根据你自己的喜好来命名。

  • :注意最后要加英文冒号哦。

  • print(e)输出程序记录的异常内容,根据该内容我们可以排查是什么地方发生了异常。

这里程序记录的异常为division by zero,表示除数为0

看到异常原因我们下次在终端输入的时候不要给除数赋值为0就能避免这个异常。

3.4 except (异常类型1,异常类型2) as 别名

【代码示例】

# input接收到的数据为字符串类型,需要用int函数将其转换成整数类
a = int (input("请输入第1个整数:"))
b = int (input("请输入第2个整数:"))
# 计算a除以b
result = a/b
print("结果为:",result)

除了除数为0的异常,上面的代码还可能有其它的异常。

我因为输入错误,在给b赋值时不小心将0输错成了p,终端输出结果如下图所示:

【终端输出】

在这里插入图片描述

【报错提示】

Traceback (most recent call last):
File "D:\安迪笔记\1.基础语法\95-异常\95.py", line 3, in <module>
b = int (input("请输入第2个整数:"))
ValueError: invalid literal for int() with base 10: 'p'

运行上面的代码,程序报 ValueError: invalid literal for int() with base 10: 'p' 这个错误。

  • line 3表示第3行有语法错误。

  • ValueError是一个异常的名称,表示传入的值错误。

  • invalid literal for int() with base 10: 'p'表示用户输入的字符串是’p’,而int()函数无法将这个字符串解析为一个有效的整数。

invalid[ɪnˈvælɪd]:无效的。

literal [ˈlɪtərəl]:文本,常量。

base [beɪs]:基础。

invalid literal for int() with base 10: 'p'逐次翻译为使用十进制基数将字符串'p'转换为整数时出现无效的字面值

invalid literal for int() with base 10: 'p'这个错误是由于我尝试将一个非数字字符转换为整数而引发的。

在Python中,int()函数用于将字符串转换为整数。

然而,当你尝试将一个无法转换为整数的字符串(如字母)传递给int()函数时,就会出现这个错误。

b=0的时候,程序出现ZeroDivisionError异常。

b=p的时候,程序出现ValueError异常。

我们发现同样的代码,可能存在多个异常。

在捕获异常时,如果需要同时处理多个异常我们可以采用下面的代码实现:

【代码示例】

try :
    # input接收到的数据为字符串类型,需要用int函数将其转换成整数类
    a = int (input("请输入第1个整数:"))
    b = int (input("请输入第2个整数:"))
    # 计算a除以b
    result = a/b
    print("结果为:",result)
except (ZeroDivisionError,ValueError) as e:
    print(e)

【程序存在2个异常情况】

except (ZeroDivisionError,ValueError) as e:
    print(e)

上面的程序可以捕获2个异常。

b=0的时候,程序捕获了ZeroDivisionError异常,输出division by zero

b=p的时候,程序捕获了ValueError异常,输出invalid literal for int() with base 10: 'p'

【b=0,程序抛出ZeroDivisionError异常】

在这里插入图片描述

【b=w,程序抛出ValueError异常】

在这里插入图片描述

4. 总结

【语法总结】

try:
    # 可能会发生异常的代码块

# 1. 单独的except
except :
    print("输入有问题,程序不能正常输出结果。")

# 2. except+异常名称
except ZeroDivisionError:
    print("输入有问题,程序不能正常输出结果。")

# 3. except 异常名称 as 别名
except ZeroDivisionError as e:
    print(e)  

# 4. except (异常名称1, 异常名称1) as 别名
except (ZeroDivisionError,ValueError) as e:
    print(e)

【没有try...except语句的输出结果】

在这里插入图片描述

【有try...except语句的输出结果】

在这里插入图片描述

【except语句中没有as的输出结果】

在这里插入图片描述

【except语句中有as的输出结果】

在这里插入图片描述

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

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

相关文章

【QT】Day4

1> 思维导图 2> 手动完成服务器的实现&#xff0c;并具体程序要注释清楚 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务器类 #include <QTcpSocket> //客户端类 #include <QMessageBox> //…

综合能源系统(4)——综合能源系统建模方法

综合能源系统关键技术与典型案例  何泽家&#xff0c;李德智主编 本文主要从物理、信息、价值三个方面介绍综合能源系统关键技术&#xff0c;如图3-1所示。 物理方面&#xff1a;主要包括综合能源系统建模分析技术、规划设计(配置)技术、优化控制技术、运行维护技术和综合评…

mybatisPlus之逻辑删除解读

目录 为什么会有逻辑删除 逻辑删除基本介绍 逻辑删除的使用 局部使用 全局使用 为什么会有逻辑删除 在我们对数据进行增删查改的时候&#xff0c;对于删除操作来说&#xff0c;我们思考一个问题&#xff0c;在实际开发中我们真的会将数据完成从数据库中删除掉么&#xff1f…

二叉搜索树(二叉排序树)

文章目录 基本概念基本操作实现分析插入数据查找数据删除数据遍历数据 源码 基本概念 二叉搜索树也叫搜索二叉树、二叉排序树、排序二叉树。是一种对查找和排序都有用的特殊二叉树。 二叉搜索树&#xff08;Binary Search Tree&#xff0c;简称BST&#xff09; 如何构建一颗二叉…

【使用维纳滤波进行信号分离】基于维纳-霍普夫方程的信号分离或去噪维纳滤波器估计(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【Windows】WDS中如何跳过语言选择以及身份验证

WDS&#xff08;Windows Deployment Services&#xff09;是微软的一项网络服务&#xff0c;用于快速和方便地部署Windows操作系统到多台计算机上。它提供了一种自动化的方式来安装、配置和管理操作系统映像&#xff0c;使企业能够快速部署和更新大量的计算机系统。网上有很多W…

二叉搜索树的本质

引言 打算写写树形数据结构&#xff1a;二叉查找树、红黑树、跳表和 B 树。这些数据结构都是为了解决同一个基本问题&#xff1a;如何快速地对一个大集合执行增删改查。 本篇是第一篇&#xff0c;讲讲搜索树的基础&#xff1a;二叉搜索树。 基本问题 如何在一千万个手机号中…

设计模式-中介者模式在Java中使用示例-客户信息管理

场景 欲开发客户信息管理窗口界面&#xff0c;界面组件之间存在较为复杂的交互关系&#xff1a;如果删除一个客户&#xff0c; 要在客户列表(List)中删掉对应的项&#xff0c;客户选择组合框(ComboBox)中客户名称也将减少一个&#xff1b; 如果增加一个客户信息&#xff0c;…

SpringBoot2.7集成Swagger3.0和knife4j实现API接口文档开发

1. 概述 Swagger 3 是一个用于描述、构建和测试 RESTful Web 服务的开源工具集。它提供了一种简单而强大的方式来定义和文档化 API 接口&#xff0c;同时还具备自动生成客户端代码和服务器存根代码的功能。 Knife4j是一个集Swagger2 和 OpenAPI3为一体的增强解决方案&#xff…

DNSPod十问秦勇:为什么医疗AI最爱眼科?

本期嘉宾 秦勇 鹰瞳科技Airdoc COO 秦勇&#xff0c;鹰瞳科技&#xff08;Airdoc&#xff09;COO&#xff0c;中国人工智能学会智慧医疗专委会委员&#xff0c;长期从事医疗人工智能方向的工作&#xff0c;拥有丰厚的项目经验、管理经验和技术积累&#xff0c;参与多个医院人…

掌握Python的X篇_13+14_Python条件语句实例:判断闰年、成绩评定

前面学习了条件语句以及调试的基本技巧&#xff0c;本篇介绍两个与条件语句有关的实例&#xff0c;对前面的知识又深刻认识。 文章目录 1. 判断闰年1.1 版本11.2 版本21.3 一行代码太长的处理方法 2. 根据成绩评级 1. 判断闰年 用户输入年份&#xff0c;判断该年份是否为闰年…

基于springboot+jpa+mysql+html网上中药商城系统

基于springbootjpamysqlhtml网上中药商城系统 一、系统介绍二、功能展示1.主页(客户)2.登陆&#xff08;客户&#xff09;3.注册&#xff08;客户&#xff09;4.购物车(客户)5.我的订单&#xff08;客户&#xff09;6.用户管理&#xff08;管理员&#xff09;7.分类管理&#x…

基于鲸鱼优化算法的5G信道估计(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑…

1400*D. Divide by three, multiply by two

题意&#xff1a; 一个序列&#xff0c;每个数都是前一个数乘2或者除3&#xff0c;打乱之后&#xff0c;需要你排出原来的序列。 queue和deque模拟 #include<bits/stdc.h> using namespace std; typedef long long ll; const int N1e55; ll n,a[N]; queue<ll>q; d…

Python进行数据分析(详细教程)

1.为什么选择Python进行数据分析&#xff1f; Python是一门动态的、面向对象的脚本语言&#xff0c;同时也是一门简约&#xff0c;通俗易懂的编程语言。Python入门简单&#xff0c;代码可读性强&#xff0c;一段好的Python代码&#xff0c;阅读起来像是在读一篇外语文章。Pyth…

【Linux命令200例】locate强大的文件查找利器

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入…

2.uni-app项目文件

uni-app像是vue与微信小程序的合体&#xff0c;使用 uni-ui项目 模板创建的项目文件如下 目录 1 pages 2 pages.json 3 App.vue 4 index.html 5 static 6 uni_modules 7 manifest.json 8 main.js 9 uni.scss 1 pages 这个是放页面的&#xff0c;默认里面有…

list与sort()

运行代码&#xff1a; //list与sort() #include"std_lib_facilities.h" //声明Item类 struct Item {string name;int iid;double value;Item():name(" "),iid(0),value(0.0){}Item(string ss,int ii,double vv):name(ss),iid(ii),value(vv){}friend istre…

七、用户画像

目录 7.1 什么是用户画像7.2 标签系统7.2.1 标签分类方式7.2.2 多渠道获取标签 7.3 用户画像数据特征7.3.1 常见的数据形式7.3.2 文本挖掘算法7.3.3 嵌入式表示7.3.4 相似度计算方法 7.4 用户画像应用 因此只基于某个层面的数据便可以产生部分个体面像&#xff0c;可用于从特定…

pso优化bp网络机械故障诊断(MATLAB代码)

在混合算法中,需要优化的对象(粒子)是 BP 神经网络的权值和值。首先应把要优化的神经网络的全部权值和闽值构成一个实数数组,并赋予它们 [0,1之间的随机数。然后,按照选定的网络结构,用前向算法计算出对应于每组输入样本的神经网络输出。这里BP网络的激活函数都选为sigmoid 函数…