【Python基础】16.异常

异常

异常的概念

  • 在程序运行过程中,如果python的解释器遇到一个错误,会停止程序的执行,并且提示一系列的异常信息,这就是异常
  • 程序停止运行并显示错误信息,我们称之为:抛出(raise)异常
  • 通过抛出、捕获、处理异常,可以提高程序的稳定性和健壮性

示例

input_s = int(input("输入整数:"))
  • 输入字母 a
ValueError: invalid literal for int() with base 10: 'a'

捕获异常

案例1

try:
    input_s = int(input("输入整数:"))
except:
    print("输入异常,请重新输入")

print("-" * 50)

结果

输入整数:a
输入异常,请重新输入
--------------------------------------------------
  • 在程序执行时,可能会遇到不同的类型的异常,针对不同的异常,应该做出不同的处理,所以需要捕获异常的类型

案例2

try:
    input_s = int(input("输入整数:"))
except Exception as result:
    print("输入异常,异常原因:%s,请重新输入" % result)
输入整数:a
输入异常,异常原因:invalid literal for int() with base 10: 'a',请重新输入
  • 捕获异常的语法如下
try:
    # 尝试执行的代码
    pass
except 异常1# 针对异常1的处理
    pass
except (异常2,异常3):
    # 针对异常2,异常3的处理
    pass
except Exception as result:
    #针对未知异常的处理
    pass 

案例3

需求:

  • 从键盘输入一个数
  • 用8/这个数,针对键盘输出的不同内容做异常处理
try:
    input_s = int(input("输入整数:"))
    print(8 / input_s)
except ValueError as value_error:
    print("输入值有误")
except ZeroDivisionError as zero_division_error:
    print("除0错误")
except Exception as result:
    print("输入异常,异常类型%s,异常信息%s,请重新输入" % (type(result), result))

print("-" * 50)

上述案例中,最后一个异常处理是捕获未知错误。

  • 捕获未知错误
    • 开发过程中不能完全预判所有错误
    • 为了不在未知错误发生时,中止程序的运行。可以在捕获异常后,再增加一个 expect
except Exception as result:
    print("未处理错误类型%s,未处理错误详情%s"%(type(result), result)))

异常捕获的完整语法

try:
    pass
except:
    pass
else:
    # 没有异常才会执行的代码
finally:
    # 无论是否出现错误,都会被执行的代码
  • else 只有在没有异常时,才会执行的代码
  • finally 无论是否有异常,都会执行的代码

案例4

try:
    input_s = int(input("输入整数:"))
    result = 8 / input_s
except ValueError as value_error:
    print("输入值有误")
except ZeroDivisionError as zero_division_error:
    print("除0错误")
except Exception as result:
    print("输入异常,异常类型%s,异常信息%s,请重新输入" % (type(result), result))
else:
    print(result)
finally:
    print("-" * 50)
测试结果1
输入整数:1
8.0
--------------------------------------------------
测试结果2
输入整数:a
输入值有误
--------------------------------------------------
测试结果3
输入整数:0
除0错误
--------------------------------------------------

异常的传递性

  • 异常的传递:当函数/方法执行出现错误的时候,会将异常传递给函数/方法的调用方
  • 如果传递到主程序,仍然没有异常处理,程序才会中止
def exception1():
    print(int(input("请输入一个整数")))


def exception2():
    exception1()


exception2()

运行结果:

请输入一个整数a
Traceback (most recent call last):
  File "C:\Users\11\PycharmProjects\pythonProject\ExceptionRaise.py", line 9, in <module>
    exception2()
  File "C:\Users\11\PycharmProjects\pythonProject\ExceptionRaise.py", line 6, in exception2
    exception1()
  File "C:\Users\11\PycharmProjects\pythonProject\ExceptionRaise.py", line 2, in exception1
    print(int(input("请输入一个整数")))
          ^^^^^^^^^^^^^^^^^^^^^
ValueError: invalid literal for int() with base 10: 'a'

可以利用异常的传递性,在主程序捕获异常并做处理

主动抛出异常

  • 在开发中,除了代码执行出错,python解释器抛出异常外
  • 可以根据应用程序特有的业务主动抛出异常

校验用户输入密码的长度

def exception1():
    pwd = input("请输入密码")
    if len(pwd) < 8:
        raise Exception("初始化密码失败,密码不能少于8位")


try:
    exception1()
except Exception as res:
    print("输入异常,异常类型%s,异常信息%s,请重新输入" % (type(res), res))

请输入密码1
输入异常,异常类型<class 'BaseException'>,异常信息初始化密码失败,密码不能少于8位,请重新输入
  • 将异常信息作为初始化参数并创建异常对象
  • 使用raise 语句抛出异常

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CodeMaid:Visual Studio代码自动整理插件!

推荐一款Visual Studio的扩展插件&#xff0c;可以帮助开发者更高效地管理和维护代码。 01 插件简介 CodeMaid是一款Visual Studio的扩展插件&#xff0c;其主要功能包括代码整理、代码格式化、自动注释、快速导航等&#xff0c;这些功能都可以提高开发者的编程效率和代码质量…

性能测试-数据库优化二(SQL的优化、数据库拆表、分表分区,读写分离、redis、数据库监控)

数据库优化 explain select 重点&#xff1a; type类型&#xff0c;rows行数&#xff0c;extra SQL的优化 在写on语句时&#xff0c;将数据量小的表放左边&#xff0c;大表写右边where后面的条件尽可能用索引字段&#xff0c;复合索引时&#xff0c;最好按复合索引顺序写wh…

5V_6A/4A高性能低EMI同步降压整流器内置8 mΩ NMOS, 31 mΩ PMOS

概述 PCD1500 是一个非常小、高效、低噪音同步 6A 降压直流/直流变换器&#xff0c;从 2.5V 到 5.5V 的输入电源运行。该变换器使用固定开关频率&#xff0c;在 1MHz 到 10MHz 时进行峰值电流模式控制&#xff0c;最小开关时间低至 22ns&#xff0c;通过较小的外部组件实现快速…

第 6 章 URDF、Gazebo与Rviz综合应用(自学二刷笔记)

重要参考&#xff1a; 课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 讲义链接:Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 6.7.4 kinect信息仿真以及显示 通过 Gazebo 模拟kinect摄像头&#xff0c;并在 Rviz 中显示kinect摄像头数据…

【Linux系统编程】第三弹---基本指令(一)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、touch指令 2、mkdir指令 3、ls 指令 4、pwd命令 3、cd 指令 6、rmdir指令 && rm 指令 7、man指令 7、cp指令 …

南京观海微电子---外电路和内电路的区别和联系、应用和优缺点

什么是外电路和内电路 首先&#xff0c;我们要明白什么是电路。电路是指由导体或其他元件连接起来的闭合路径&#xff0c;能够让电流通过。我们平时见到的灯泡、手机、电脑等都是由不同的电路组成的。 电路一点通 “电路一点通”聚电路技术资源、电子电路、高品质电路图、电路…

【计算机毕业设计】4S店车辆管理系统——后附源码

&#x1f389;**欢迎来到我的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 一名来自世界500强的资深程序媛&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 在深度学习任务中展现出卓越的能力&#xff0c;包括但不限于…

vue+springboot实现聊天功能

前言 在我的项目中&#xff0c;突然有种想法&#xff0c;想实现聊天功能&#xff0c;历经一段时间终于做出来了&#xff1b;那么接下来会讲解如何实现&#xff0c;这篇文章只会实现最基础的逻辑&#xff0c;实时获取对方聊天记录&#xff0c;话不多说&#xff0c;我们就开始吧…

脚本开发与自动化运维

shell脚本开发 grep搜索工具 参数&#xff1a; -A<显示行数>&#xff1a;-A NUM, --after-context NUM&#xff0c;除了显示符合范本样式的那一行之 外&#xff0c;并显示该行之后的内容。 -B<显示行数>&#xff1a;--before-context NUM&#xff0c;除了显示…

nmap、john、tcpdump

Kali是基于Debian的Linux发行版&#xff0c;Kali Linux包含上百个安全相关工具&#xff0c;如渗透测试、安全检测、密码安全、反向工程等。 扫描&#xff1a;获取一些公开、非公开信息为目的&#xff1b;检查潜在的风险、查找可攻击的目标、收集设备/主机/系统/软件信息、发现可…

开源模型应用落地-chatglm3-6b-批量推理-入门篇(四)

一、前言 刚开始接触AI时&#xff0c;您可能会感到困惑&#xff0c;因为面对众多开源模型的选择&#xff0c;不知道应该选择哪个模型&#xff0c;也不知道如何调用最基本的模型。但是不用担心&#xff0c;我将陪伴您一起逐步入门&#xff0c;解决这些问题。 在信息时代&#xf…

从AdTech转战Martech,驰骛科技的PaaS之路

中国最早的Adtech公司之一&#xff0c;在被全资收购后&#xff0c;其创始团队又创立了一家Martech公司。赛道的变更也从侧面反映出中国营销技术市场的发展轨迹。 驰骛科技创始团队来自易传媒核心团队&#xff0c;驰骛科技创始人程华奕是易传媒创始人兼CTO&#xff0c;是中国最早…

修改taro-ui-vue3的tabs组件源码增加数字标签

需求&#xff1a;taro-ui-vue3的tabs组件上增加数字标记 步骤一&#xff1a;node_modules文件夹下找到taro-ui-vue3/lib/tabs/index.js 把173行的这一段替换成下面这段&#xff0c;然后写上样式 default: () > item.number ? [h(View, {class: at-tabs__item_in}, {defau…

maven3.9的settings.xml 内容学习

settings.xml 文件介绍 settings.xml 是 Maven 的配置文件&#xff0c;它允许你自定义 Maven 的行为&#xff0c;比如设置仓库、代理、认证信息等。在 Maven 3.9 中&#xff0c;settings.xml 的结构和内容可能与之前的版本相似&#xff0c;但可能会有一些小的改进或变化。下面…

经典文献阅读之--RaLF(激光雷达地图中基于流的全局和度量雷达定位)

0. 简介 激光雷达地图中基于流的全局和度量雷达定位。自主机器人的定位是至关重要的。尽管基于相机和激光雷达的方法已经得到大量研究&#xff0c;但是它们会受到恶劣的光照和天气条件的影响。因此&#xff0c;最近雷达传感器由于其对这种条件固有的鲁棒性而受到关注。在《RaL…

回归预测 | Matlab实现SSA-GRNN麻雀算法优化广义回归神经网络多变量回归预测(含优化前后预测可视化)

回归预测 | Matlab实现SSA-GRNN麻雀算法优化广义回归神经网络多变量回归预测(含优化前后预测可视化) 目录 回归预测 | Matlab实现SSA-GRNN麻雀算法优化广义回归神经网络多变量回归预测(含优化前后预测可视化)预测效果基本介绍程序设计参考资料预测效果

linux应急响应基础命令

一、cpu使用率-top top -c -o %CPU -c 显示进程的命令行参数 -o 按照CPU占用从大到小排序二、用户信息 1、查看系统所有用户信息 [rootcentos7 ~]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nol…

FlexLua低代码技术,十分钟搞定4G转LoRa网关设备

在当今物联网时代&#xff0c;无线通信技术的发展日新月异&#xff0c;4G和LoRa作为两种不同的通信技术&#xff0c;各自拥有独特的优势和应用场景。而4G转LoRa网关设备的出现&#xff0c;则将这两种技术有效地结合起来&#xff0c;为物联网应用提供了更多可能性。 4G转LoRa网关…

室内设计师必备的免费3D模型网站,赶紧收藏!

3D模型已经成为室内设计师的重要工具。它们不仅能够帮助设计师更好地理解和呈现他们的设计概念&#xff0c;还能够提高工作效率&#xff0c;减少错误和修改的次数。然而&#xff0c;许多高质量的3D模型都需要付费购买&#xff0c;那么室内设计师必备的免费3D模型网站有哪些? 首…

探索C# 11与.NET 7:入门指南与跨平台开发

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…