try…except语句

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501

在程序开发时,有些错误并不是每次运行都会出现。例如,实例01,只要输入的数据符合程序的要求,程序就可以正常运行,否则将抛出异常并停止运行。假设在输入苹果的数量时,输入了23.5,那么程序将抛出如图3所示的异常。

图3  抛出ValueError异常

这时,就需要在开发程序时对可以出现异常的情况进行处理。

在Python中,提供了try…except语句捕获并处理异常。在使用时,把可能产生异常的代码放在try语句块中,把处理结果放在except语句块中,这样,当try语句块中的代码出现错误时,就会执行except语句块中的代码,如果try语句块中的代码没有错误,那么except语句块将不会执行。具体的语法格式如下:

try:

    block1

except [ExceptionName [as alias]]:

    block2

参数说明:

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

l  ExceptionName [as alias]:可选参数,用于指定要捕获的异常。其中,ExceptionName表示要捕获的异常名称,如果在其右侧加上as alias,则表示为当前的异常指定一个别名,通过该别名,可以记录异常的具体内容。

说明:在使用try…except语句捕获异常时,如果在except后面不指定异常名称,则表示捕获全部异常。

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

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

下面将对实例01进行改进,加入捕获异常功能,对除数不能为0的情况进行处理。

图标 (35)

  实例02  模拟幼儿园分苹果(除数不能为0)

在IDLE中创建一个名称为division_apple_0.py的文件,然后将实例01的代码全部复制到该文件中,并且对“if __name__ == '__main__':”语句下面的代码进行修改,应用try…except语句捕获执行division()函数可能抛出的ZeroDivisionError(除数为零)异常,修改后的代码如下:

def division():

    '''功能:分苹果'''

    print("\n===================== 分苹果了 =====================\n")

    apple = int(input("请输入苹果的个数:"))                      # 输入苹果的数量

    children = int(input("请输入来了几个小朋友:"))

    result = apple // children                                  # 计算每人分几个苹果

    remain = apple - result * children                          # 计算余下几个苹果

    if remain > 0:

        print(apple, "个苹果,平均分给", children, "个小朋友,每人分", result,

              "个,剩下", remain, "个。")

    else:

        print(apple, "个苹果,平均分给", children, "个小朋友,每人分", result, "个。")

if __name__ == '__main__':

    try:                                                       # 捕获异常

        division()                                         # 调用分苹果的函数

    except ZeroDivisionError:                                 # 处理异常

        print("\n出错了 ~_~ ――苹果不能被0个小朋友分!")

执行以上代码,输入苹果的数量为10,小朋友的人数为0时,将不再抛出异常,而是显示如图4所示的结果。

图4  除数为0时重新执行程序

目前,我们只处理了除数为0的情况,如果将苹果和小朋友的数量输入成小数或者不是数字会是什么结果呢?再次运行上面的实例,输入苹果的数量为2.7,将得到如图5所示的结果。

图5  输入的数量为小数时得到的结果

从图5中可以看出,程序中要求输入整数,而实际输入的是小数,则抛出ValueError(传入的值错误)异常。要解决该问题,可以在实例02的代码中,为try…except语句再添加一个except语句,用于处理抛出ValueError异常的情况。修改后的代码如下:

def division():

    '''功能:分苹果'''

    print("\n===================== 分苹果了 =====================\n")

    apple = int(input("请输入苹果的个数:"))               # 输入苹果的数量

    children = int(input("请输入来了几个小朋友:"))

    result = apple // children                            # 计算每人分几个苹果

    remain = apple - result * children                    # 计算余下几个苹果

    if remain > 0:

        print(apple, "个苹果,平均分给", children, "个小朋友,每人分", result,

              "个,剩下", remain, "个。")

    else:

        print(apple, "个苹果,平均分给", children, "个小朋友,每人分", result, "个。")

if __name__ == '__main__':

    try:                                               # 捕获异常

        division()                                    # 调用分苹果的函数

    except ZeroDivisionError:                         # 处理异常

        print("\n出错了 ~_~ ――苹果不能被0个小朋友分!")

    except ValueError as e:                              # 处理ValueError异常

        print("输入错误:", e)                            # 输出错误原因

再次运行程序,输入苹果的数量为小数时,将不再直接抛出异常,而是显示友好的提示,如图6所示。

图6  输入的数量为小数时显示友好的提示

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

try:                                                     # 捕获异常

    division()                                            # 调用分苹果的函数

except (ValueError,ZeroDivisionError ) as e:             # 处理异常

print("出错了,原因是:",e)                            # 显示出错原因

即在except语句后面使用一对小括号将可能出现的异常名称括起来,多个异常名称之间使用逗号分隔。如果想要显示具体的出错原因,那么再加上as指定一个别名。

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

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

相关文章

推荐一个免费的相亲工具

推荐一个免费的相亲工具,步骤如下: 1)微信里面搜索公众号“光源桥”,并关注 2)输入搜索条件进行搜索对象 例如下面搜索:

CDH服务红,查看日志发现host有问题

看host后,发现里面节点ip都是127.0.0.1然后全部改成对应的ip, 1.在/etc/hosts里面全部加上了 ip以及对应的角色名称 2然后注释了127.0.0.1 hostname 3.然后重启所有的机器agent和server,在重新登录,点击重新部署。 重启agent sy…

电子凭证3.0,助力企业实现报销自动化

在数字化浪潮汹涌澎湃的今天,企业对于高效、便捷、安全的财务管理需求日益凸显。传统的报销流程繁琐、耗时,不仅增加了企业的运营成本,还影响了员工的工作效率和满意度。用友BIP电子凭证3.0的发布,无疑为企业实现报销自动化提供了…

Linux:共享内存介绍(进程间通信)

共享内存 共享内存原理介绍共享内存系统调用接口shmget 创建共享内存段ftok 生成唯一键 key开始创建共享内存指令 ipcs -m 查看共享内存指令 ipcrm -m 删除共享内存段shmctl 控制创建的共享内存通过系统调用来删除共享内存 共享内存权限问题关联/去关联共享内存封装处理 共享内…

数据采集项目结案报告

常州嘉爵机械机床采集项目案例 项目背景 常州市嘉爵机械配件厂 响应国家政策,申报智能车间,优化管理 车间设备包括:发那科机床、三菱机床。 项目需求调研分析 采集设备工艺参数,计算设备稼动率。 车间设备情况: …

HarmonyOS应用开发深度指南:从基础到高级实践

1. HarmonyOS开发概述 HarmonyOS是华为推出的分布式操作系统,旨在为不同设备提供统一的体验。它支持多种编程语言,包括ArkTS、JS、C/C++和Java。开发者需要了解HarmonyOS的分布式架构,包括Ability、Service、Data Ability等核心概念。 了解HarmonyOS的分布式架构:HarmonyO…

在视频号上面怎么卖货?只需要开一个店铺即可!具体怎么操作?

大家好,我是电商小V 最近这段时间在视频号上面卖货的热度可以说是非常大的,也是创业者常常提起的话题,大家之所以对视频号卖货非常感兴趣那是因为视频号和抖音处于一个赛道,也是朝着电商的方向发展, 所以说大家对于腾讯…

cmake使用(01)

顶层CMakeLists.txt cmake_minimum_required (VERSION 3.5)# 配置 交叉编译 放置在 project() 命令之前# /opt/fslc-wayland/2.5.2/sysroots/aarch64-fslc-linux/usr/bin/make: error # while loading shared libraries: libdl.so.2: cannot open shared object file: # No su…

c++ 模板类的泛化版本,只声明,不定义,可以么?可以

王建伟老师的课本,413 页讲解过这个情况。只要不创建泛化模板的对象即可。最近看源码时,也出现了这种情况,大师们也这么写。故简化逻辑,测试一下: 谢谢

家庭海外仓系统:做好标准化管理,小空间也能做出高收益

家庭海外仓凭借其运营模式灵活,合作成本低的独有特点,还是被很多跨境卖家所接受的。不过家庭海外仓的盈利也面临着一些问题。 首先,家庭海外仓的仓储空间有限,很难通过规模效应放大收益。家庭海外仓通常只能存储少量货物&#xf…

个人参与场外期权交易的最全指南

个人参与场外期权交易的最全指南 一、引言 场外期权作为金融市场中的一大亮点,为个人投资者提供了多样化的风险管理及投资策略选择。本文将详细探讨个人如何安全、有效地参与场外期权交易。 文章来源/:财智财经 二、理解场外期权 场外期权是双方通过协…

fastjson反序列化漏洞复现

靶机IP:192.168.253.134 攻击机IP:192.168.142.44 1、靶机环境搭建 靶机:http://caiyun.feixin.10086.cn/dl/095CteuquNKVq 提取密码:NNPD RCE:http://caiyun.feixin.10086.cn/dl/095CuIsJQOw14 提取密码:J2vd 靶机账号密码&…

OBS+nginx+nginx-http-flv-module实现阿里云的推流和拉流

背景:需要将球机视频推送到阿里云nginx,使用网页和移动端进行播放,以前视频格式为RTMP,但是在网页上面播放RTMP格式需要安装flash插件,chrome浏览器不给安装,调研后发现可以使用nginx的模块nginx-http-flv-…

工业物联网网关助推企业数字化转型,解决设备互联互通问题-天拓四方

随着科技的飞速发展,物联网技术已经渗透到工业领域的每一个角落。作为连接物理世界和数字世界的桥梁,工业物联网网关在推动企业数字化转型中发挥着至关重要的作用。数字化转型已经成为企业提升竞争力的必由之路,然而,在转型过程中…

升级最新版openssh-9.7p1及openssl-1.1.1h详细步骤及常见问题总结

近期因为openssh相继被漏洞扫描工具扫出存在漏洞,所以考虑升级操作系统中的openssh和openssl为最新版本,来避免漏洞风险。期间的升级过程及遇到的疑难问题,特此记录下来,供有需要的人参考。 本次目标是升级 openssh 为 9.7p1 版本…

计算机网络ppt和课后题总结(上)

试在下列条件下比较电路交换和分组交换。要传送的报文共 x(bit)。从源点到终点共经过 k 段链路,每段链路的传播时延为 d(s),数据率为 b(b/s)。在电路交换时电路的建立时间为 s(s)。在分组交换时分组长度为 p(bit),且各结点的排队等待时间可忽…

深入理解 Vue Router 及其 `router` 和 `route` 变量

深入理解 Vue Router 及其 router 和 route 变量 在使用 Vue.js 进行单页面应用开发时,Vue Router 是一个不可或缺的工具。它使得我们可以轻松地管理应用中的路由,提供了流畅的用户体验。然而,在实际开发中,许多开发者可能会混淆…

YOLOv8+PyQt5苹果叶病害检测(可以重新训练,yolov8模型,从图像、视频和摄像头三种路径识别检测)

效果视频:YOLOv8PyQt5苹果叶病害检测系统完整资源集合 资源包含可视化的苹果叶病害检测系统,基于最新的YOLOv8训练的苹果叶病害检测模型,和基于PyQt5制作的可视苹果叶病害系统,包含登陆页面和检测页面,该系统可自动检…

操作符:->

在一个指针变量指向一个结构体时常常会用->操作符来使用结构体内部的成员&#xff0c; 下面是我们没有使用指针时&#xff0c;如何调用结构体内的成员&#xff0c; #include<stdio.h>struct stu {char name[20];int age;char number[20]; };int main() {struct stu …

python实现——分类类型数据挖掘任务(图形识别分类任务)

分类类型数据挖掘任务 基于卷积神经网络&#xff08;CNN&#xff09;的岩石图像分类。有一岩石图片数据集&#xff0c;共300张岩石图片&#xff0c;图片尺寸224x224。岩石种类有砾岩&#xff08;Conglomerate&#xff09;、安山岩&#xff08;Andesite&#xff09;、花岗岩&am…