11. python从入门到精通——异常处理及程序调试

news2024/11/26 1:29:55

目录

异常概述

异常处理语句主要有四种

程序调试:Python有两种常用调试方法


异常概述

异常:异常就是出现错误并且会中断程序的正常执行

异常处理语句主要有四种

示例库:在输入浮点数或除数为0时会异常

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__':
    division()                                      # 调用分苹果的函数

1. try...except :可以捕获异常并给出相应的处理结果

    语法:

        try:

            block1    #放入可能产生异常的代码

        except [ExceptionName [as alias]]   

                #[ExceptionName [as alias]]:指定要处理的异常,如果不指定则会会处理所有异常

                #[as alias]:给异常指定别名,它可以在输出异常内容时通过别名表示

            block2    #放入处理结果,如果block1出现异常就会执行block2中的代码

示例

def division():
    '''功能:分苹果'''
    print("\n===================== 分苹果了 =====================\n")
    apple = int(input("请输入苹果的个数:"))                     # 输入苹果的个数
    children = int(input("请输入来了几个小朋友:"))
    if apple < children:
        raise ValueError("苹果太少了,不够分...")
    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:                                      # 处理除数为0的异常
        print("\n出错了 ~_~ ——苹果不能被0个小朋友分!")
    except ValueError as e:                                        # 处理值为浮点数的异常
        print("\n出错了 ~_~ ——",e)

#也可以一次指定多个异常
# if __name__ == '__main__':
#     try:                                        # 捕获异常
#         division()                              # 调用分苹果的函数
#     except (ZeroDivisionError,ValueError) as e:                   # 处理异常
#         print(e)

2. try...except ...else:在捕获异常时对没有出现异常的情况进行处理

    语法:

        try:

            block1

        except [ExceptionName [as alias]]   

            block2

        else:

            block3    #没有抛出异常时才执行

示例        

def division():
    '''功能:分苹果'''
    print("\n===================== 分苹果了 =====================\n")
    apple = int(input("请输入苹果的个数:"))                     # 输入苹果的个数
    children = int(input("请输入来了几个小朋友:"))
    if apple < children:
        raise ValueError("苹果太少了,不够分...")
    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,ValueError) as e:                   # 处理异常
        print(e)
    else:
        print("分苹果顺利完成..")  #代码执行正常后再执行

3. try...except finally  #无论是否出现异常,都要执行一段固定的代码

    在实际项目开发中经常用来实现与关闭相关的操作,比如关闭文件

    语法:

        try:

            block1

        except [ExceptionName [as alias]]   

            block2

        finally:

            block3    

示例

def division():
    '''功能:分苹果'''
    print("\n===================== 分苹果了 =====================\n")
    apple = int(input("请输入苹果的个数:"))                     # 输入苹果的个数
    children = int(input("请输入来了几个小朋友:"))
    if apple < children:
        raise ValueError("苹果太少了,不够分...")
    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,ValueError) as e:                   # 处理异常
        print(e)
    else:
        print("分苹果顺利完成..")
    finally:
        print("进行了一次分苹果操作")

4. 使用raise语句抛出异常

    在程序开发时如果某个函数或方法可能会产生异常,但我们不想在当前的函数或方法当中来处理这个异常就可以使用raise语句在这个函数或方法当中来抛出异常,抛出异常后,后面的代码不会再执行

    语法:

        raise [ExceptionName[(reason)]]

                #[ExceptionName[(reason)]]:定义抛出的异常名称,如果省略此参数就会把当前的错误原样抛出

                #[(reason)]:异常信息的相关描述,如果省略此参数在抛出异常时就不会附带任何描述信息

        示例:模拟幼儿园分苹果(每个人至少分到一个)否则抛出异常

def division():
    '''功能:分苹果'''
    print("\n===================== 分苹果了 =====================\n")
    apple = int(input("请输入苹果的个数:"))                  
    children = int(input("请输入来了几个小朋友:"))
    if apple < children:
        raise ValueError("苹果太少了,不够分...")
    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,ValueError) as e:              
        print(e)

程序调试:Python有两种常用调试方法

断点:在进行程序调试运行的时候想让程序在哪里停下来就在哪里设置断点,一个程序中可以设置多个断点

(1)使用python自带的IDLE进行程序调试

    打开调试功能:

        打开IDLE → Debug → Debugger

    debug控制台按钮作用:

        Globals:显示全局变量

        Go:继续执行

        Step:如果在设置的断点处调用了其他的函数,那么单机这个按钮会进入到函数的内部执行

        Over:单步执行

        Out:跳出函数与Step对应

        Quit:结束调试进行修改

    设置断点:

        光标放在要设置断点的行,鼠标右击选择 SetBreaKpoint

        设置好断点后按F5执行代码进行调试    

(2)使用assert断言语句调试程序

    一般用在对程序某个时刻必须满足的条件进行验证的时候,一般与异常处理语句结合使用

    不能用在检查用户输入,只能用在检查某些内容是否始终为真,如果不能保证说明程序中存在BUG。这是因为assert语句只在调试的时候有有效,可以在命令行执行python命令时通过python -O 文件名.py  来关闭assert语句

    python -O 文件名.py:表示在非调试状态执行语句

    语法:

        assert expression [,reason]

                #expression:要满足条件的表达式,如果为假则抛出 False:AssertionError的异常

                #[,reason]:对判断条件进行描述,以便更好的明确问题原因

    示例

def division():
    '''功能:分苹果'''
    print("\n===================== 分苹果了 =====================\n")
    apple = int(input("请输入苹果的个数:"))          
    children = int(input("请输入来了几个小朋友:"))
   
    assert apple > children ,"苹果不够分"    #应用断言调试
    
    result = apple//children                
    remain =apple-result*children                 
    if remain>0:
        print(apple,"个苹果,平均分给",children,"个小朋友,每人分",result,
               "个,剩下",remain,"个。")
    else:
        print(apple,"个苹果,平均分给",children,"个小朋友,每人分",result,"个。")
if __name__ == '__main__':
    division()                   
    
    # 将assert语句和异常处理语句结合使用时,删除上面的division()语句,然后打开下面4行代码的注释
##    try:
##        division()                                    # 调用分苹果的函数
##    except AssertionError as e:
##        print("\n输入有误:",e)

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

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

相关文章

【JMeter】threadNum:将接口查询结果列表按顺序赋值给各线程

使用JMeter做性能测试会遇到这么一个场景&#xff1a;后面的请求需要根据前面的查询列表结果通过正则表达式提取器取值后赋值&#xff0c;而后面用户的赋值必须是唯一的&#xff0c;此时该如何做&#xff1f; 如果按编程思维来说&#xff0c;这个问题并不难。只需要把前面的结…

他们都开始偷偷学习高性能计算了 | 学习高性能计算需要哪些前置知识?

随着大模型的越演越烈&#xff0c;高性能计算这一领域被越来越多的人所熟知。未来的超算互联网时代&#xff0c;不懂高性能计算更是难以适应未来时代的发展与变化。很多同学都想学习高性能计算&#xff0c;今天作为国内首家专注高性能计算人才培养的专业机构就帮大家梳理一下&a…

接连三预测成真,75%的参与率,华为、阿里、腾讯纷纷介入

Cartner预测&#xff1a;75%参与率 去年&#xff0c;Cartner预测&#xff0c;75%的大型企业将使用至少四种低代码/无代码开发工具&#xff0c;用于IT应用开发&#xff01; 可以感受的到&#xff0c;这几年低代码以突飞猛进的速度在各领域中得到应用。可以预见的是&#xff0c;…

如何 Java 中的大量的 if else 判断?

目录 问题出现&#xff1a; 如何 Java 中的大量的 if else 判断&#xff1f; 解决方案&#xff1a; 1.策略模式 2.工厂模式 3.映射表 4.反射配置文件------极力推荐使用&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 问题出现&#xff1a; 如何 Java 中的…

STM32F407ZGT6 LQFP144 uart 打印输出

STM32F407ZGT6 AX58100 ETHERCAT芯片软件&#xff0c;需要查看SSC 协议栈运行情况&#xff0c;UART输出状态信息。 STM32F407ZGT6 驱动库使用标准库&#xff0c;虽然老&#xff0c;但是够用。 1.STM32F407ZGT6 芯片情况 STM32F407ZGT6 作为AX58100 的主控 2.板子硬件 STM3…

mysql双主不一致数据修复

参考&#xff1a; pt-table-checksum — Percona Toolkit Documentation pt-table-sync — Percona Toolkit Documentation #对比host1 test库与备库差别 pt-table-checksum hhost1,proot,P3306,uroot -d test --recursion-method processlist --no-check-binlog-format -…

Spring Boot进阶(52):Spring Boot 如何集成Flyway并初始化执行 SQL 脚本?| 超级详细,建议收藏

1. 前言&#x1f525; 在我们的认知中&#xff0c;我们会使用 SVN 或 Git 进行代码的版本管理。但是&#xff0c;我们是否好奇过&#xff0c;数据库也是需要进行版本管理的呢&#xff1f; 在每次发版的时候&#xff0c;我们可能都会对数据库的表结构进行新增和变更&#xff0c;…

微机保护的数据采集系统(1)

一、模拟五输入电路概述 模拟量输入电路是微机保护装置中很重要的电路。保护装置的动作速度和测量精确度等性能都与该电路密切相关。模拟量输入电路的主要作用是隔离、规范输入电压及完成模数变换&#xff0c;以便与CPU接口&#xff0c;完成数据采集任务。因此这部分电路又称数…

iOS —— xcode14兼容 iOS9~iOS10系统

xcode14兼容 iOS9&#xff5e;iOS10系统 在Xcode升级到Xcode14以后&#xff0c;系统的支持版本升级到了iOS11.0。但是我们项目需要支持iOS9&#xff0c;脚本打包错误提示&#xff1a; The iOS deployment target IPHONEOS_DEPLOYMENT_TARGET is set to 9.0, but the range of …

鼠标的移入、移出事件

目录 一、mouseover和mouseenter 二、mouseout和mouseleave 三、重点总结 在原生JS中鼠标移入移出事件有四个&#xff0c;分别为mouseover ,mouseout ,mouseenter,mouseleave&#xff0c;其中mouseover和mouseenter为移入事件&#xff0c;mouseout和mouseleave为移出事件&…

IDEA提交过滤target、idea、iml、vscode、build、iws、imlz、ipr、xls、rebel.xml

一、问题截图&#xff08;IDEA提交过滤target、idea、iml、vscode、build、iws、imlz、ipr、xls、rebel.xml&#xff09; 二、解决 添加.gitignore提交到仓库&#xff0c;就可以了 HELP.md target/ !.mvn/wrapper/maven-wrapper.jar !**/src/main/** #!**/src/test/**### STS …

交换机中光口是如何配置的

在往期的文章中我们有介绍到电口和光口的概念&#xff0c;以及两者之间的区别。本期文章我们来了解一下交换机光口的是如何配置的。 一、交换机光口是如何配置的 1、确认光口类型&#xff1a;首先&#xff0c;确定光口插槽使用的光模块类型&#xff08;如SFP、SFP、QSFP等&am…

掌握5个关键点,搞定语音识别测试!

现在市面上的智能电子产品千千万&#xff0c;为了达到人们使用更加方便的目的&#xff0c;很多智能产品都开发了语音识别功能&#xff0c;用来语音唤醒进行交互&#xff1b; 另外&#xff0c;各大公司也开发出来了各种智能语音机器人&#xff0c;比如小米公司的“小爱”&#…

Redis实战案例2-基于Redis实现共享session短信登录

1. 实现Redis替代session的业务流程 保存用户登录信息采用Hash结构&#xff1b; key要保证唯一&#xff0c;用随机生成的token&#xff08;随机字符串&#xff09;作为key&#xff1b; 并且要保证客户端可以携带key去redis取出value&#xff0c;之前采用session方式是Tomcat自动…

实在智能RPA亮相2023全球人工智能技术博览会,“能对话的数字员工”引领智能自动化新篇章

随着ChatGPT火爆全网&#xff0c;人工智能再次成为学术界和科技领域“新宠”&#xff0c;一场“智能革命”的序幕悄然掀开。 6月13日&#xff0c;“智能驱动 砥砺前行”为主题的2023全球人工智能技术博览会在杭州未来科技城学术交流中心圆满落下帷幕。此次博览会以展示智能科技…

Java开发 - 带你了解集群间的相互调用,你还在等什么?

目录 前言 导读 项目准备 集群准备 父工程引入子项目 服务调用方HelloService准备 pom文件 yml文件 Controller文件 服务提供方HelloWorld准备 pom文件 yml文件 Controller文件 运行此两个工程 hello_world组集群 集群调用测试 RestTemplate换成Dubbo行不行…

web基础与HTTP

文章目录 一.web基础1.域名概述2.DNS解析3.阿里云域名申请流程 二.网页1.网页&#xff08;HTTP/HTTPS)1.1 网页1.2 网站1.3 域名1.4 HTTP/HTTPS1.5 URL1.&#xff16;HTML1.7超链接1.&#xff18;发布 &#xff12;. HTML&#xff12;.&#xff11;HTML超文本标记语言&#xff…

人机交互学习-3 交互设计目标与原则

交互设计目标与原则 交互设计目标可用性目标易用性&#xff08;learnability&#xff09;高效率&#xff08;efficiency&#xff09;易记性&#xff08;memorability&#xff09;少出错&#xff08;errors&#xff09;主观满意度&#xff08;satisfaction&#xff09; 用户体验…

C++ 11(2)右值引用 | 移动构造、移动赋值

前文中我们讲解了C11中的部分知识点&#xff0c;下面我们来介绍一下C11中的一个比较重要的知识点右值引用。 右值引用和移动语义 左值引用和右值引用 左值引用 左值就是一个数据的表达式&#xff08;如变量名和解引用指针&#xff09;&#xff0c;我们可以获取它的地址可以…

JD 某工业平台详情API接口PHP接口数据API接口

随着电商市场的蓬勃发展&#xff0c;越来越多的企业正在寻找一种高效、便捷的方式来推销和销售自己的产品。在这个过程中&#xff0c;API接口的使用变得越来越普遍。而京东工业平台商品详情API接口正是一种在推销和销售方面迅速占据市场的技术。 京东工业平台商品详情API接口是…