当前位置: 首页 > news >正文

[oeasy]python0139_尝试捕获异常_ try_except_traceback

尝试捕获异常

回忆上次内容

  • 变量相加
    • 整型数字变量可以相加
    • 字符串变量也可以拼接
  • 但是
    • 字符串 和 整型数字
    • 整型数字 和 字符串
    • 不能相加
  • 怎么办?
    • 转格式
    • int(“1”)
    • str(2)
  • 可是
    • 如果输入的苹果数量是
      • 字符串"abc"
    • int(“abc”)会发生什么??😱

先试试看

  • 虽然我有了心理准备
    • 但是 python 显然还没有准备好

图片描述

  • 要让 python 知道
    • 什么时候可能会出错

简化问题

  • python3 的意思是
    • 不知道怎么把 abc 转化为十进制数
  • 不但 python3 没有办法转化
    • 我也没有思路

图片描述

  • 有的时候数字中确实可以有 abc
    • 比如 0xa 这种形式
  • 0xabc 是可以转化为数字的
    • abc 是不能转化的
      • 如何进行区分呢

思路

  • 尝试转化的工作
    • 出现在倒数第二行
    • total = int(a) + int(b)
  • 需要做的
    • 着 运行这一行
#!/usr/bin/python3
a = input("How many apples do you have: ")
print("You have got " + a + " apples!")
b = input("How many banana do you have: ")
print("You have got " + b + " bananas!")
total = int(a) + int(b)
print("You have got " + str(total) + " fruits in all!")
  • 既然 给了用户输入的 权利
    • 就要处理 用户输入的错误
  • 如果遇到了 不能转化的情况
    • 就要处理
      • 给用户 一个 明确的报错
  • 怎么才能让 python3 试着运行呢?

搜索 try

  • 搜索一下 python3 + try

图片描述

try

  • try 就是 试着来

    • 把需要试着来的代码部分放到 try 里面
      图片描述
  • 试着 成功了

    • 就继续运行 try里面的代码
    • 直到完成 try中所有的代码
  • 试着 失败了

    • 就跳转到except部分 执行
  • 这就是

    • 异常的处理

试着来

  • 下面的源代码
    • 可以直接复制
    • 系统会将两个反斜杠\\
      • 转义成一个反斜杠\
#!/usr/bin/python3
a = input("How many apples do you got?\\n")
print("You got " + a + " apples!")
b = input("How many bananas do you got?\\n")
print("You got " + b + " bananas!")
try:total = int(a) + int(b)
except:print("\\33[41m[error]\\33[0m -- input should be numbers!")
print("You got " + str(total) + " fruits!")
  • 注意
    • 冒号
      • 是英文半角的
      • 要紧跟着 try、except
    • 缩进
      • 待尝试的内容需要缩进 4 个字符
      • total = int(a) + int(b)
      • 所有需要try的内容都要
        • 缩进
      • 就像while True中需要循环的循环体
        • 需要缩进一样
      • 缩进距离不多不少
        • 4个就很合适

尝试运行

  • 运行失败了
    • 成功报了错

图片描述

  • 原来想的是 试着执行这句
    • total = int(a) + int(b)
  • 可是这句 里面
    • 不但进行 类型转化
    • 还声明了 一个变量 total
  • 这个total
    • 由于int(“a”) 会出现错误
    • 根本没有被声明
    • 而且 后面还要被引用
  • 后面引用不到
    • 所以报错了
    • 没 try成功
  • 怎么办?

再次修正

  • 都放 try 里面
#!/usr/bin/python
a = input("How many apples do you got?\\n")
print("You got " + a + " apples!")
b = input("How many bananas do you got?\\n")
print("You got " + b + " bananas!")
try:total = int(a) + int(b)print("You got " + str(total) + " fruits!")
except:print("\\33[41m[error]\\33[0m -- input should be numbers!")

尝试

  • 试试行不行

图片描述

  • 这次终于成功地报错了!
    • 或者说我接管了相关的报错信息
    • 对于这类错有了自己的处理
    • 这就是捕获了异常
    • 并且处理了异常
  • 红颜色的 error 好扎眼
    • 我把他瞒下来
    • 不报错可以么?

不报错

#!/usr/bin/python
a = input("How many apples do you got?\\n")
print("You got " + a + " apples!")
b = input("How many bananas do you got?\\n")
print("You got " + b + " bananas!")
try:total = int(a) + int(b)print("You got " + str(total) + " fruits!")
except:pass

图片描述

  • 这不行!!!😡
    • 异常错误不处理不行
    • 要明确得处理
    • 要明确的报错
  • 知道哪里错了
    • 才好修改
  • 如果假装没犯错
    • 就会完全没有处理线索
    • 程序大了绝对让人彻底崩溃

对应禅语

  • 错误不应被悄悄传递
    • 除非你确定需要这样做

图片描述

  • 精准地捕获异常
    • 不写 except:pass 风格的代码
    • 那什么是 except:pass 风格的代码呢?

异常飘过

  • 就是 那种知错不报错的方式
    • 虽然 except接收到了错误
    • 但是 轻轻飘过pass

图片描述

  • 上面这是错的!
    • 这是最要命的
    • 让人没有追踪trace的痕迹
    • 无法调试debug!
    • 无语问苍天😭!
  • 不但要有自己的报错
    • 还要保留系统的报错
  • 有可能吗?

保留报错

图片描述

  • 最终结果

图片描述

  • 可以让报错详细一些吗?
  • 比如文件、行号

保留报错细节

图片描述

  • import traceback
    • traceback.print_exc()

图片描述

总结

  • 这次学习了

    • try
    • except
  • 注意要点

    • 半角冒号
    • 缩进
    • 错误信息输出
  • 有错就处理

    • 不要忽略、隐瞒
    • 否则找不到出错位置
    • 还可以用traceback把
      • 系统报错信息原样输出
  • 但是代码量好多啊

    • 10多 行了 🤯
    • 可以把他输入部分和输出部分么?🤔
  • 我们下次再说!👋

  • 蓝桥->https://www.lanqiao.cn/courses/3584

  • github->https://github.com/overmind1980/oeasy-python-tutorial

  • gitee->https://gitee.com/overmind1980/oeasypython

相关文章:

[oeasy]python0139_尝试捕获异常_ try_except_traceback

尝试捕获异常 回忆上次内容 变量相加 整型数字变量可以相加字符串变量也可以拼接 但是 字符串 和 整型数字整型数字 和 字符串不能相加 怎么办? 转格式int(“1”)str(2) 可是 如果输入的苹果数量是 字符串"abc" int(“abc”)会发生什么?&…...

树的刷题,嗝

今天忘记带本子了,就没有学习java了,于是一心刷题,好烦遇到了两个奇怪的题目,我没跟题解写的,但是我是没想到奇怪的样例. no.1 617. 合并二叉树 难度简单1221收藏分享切换为英文接收动态反馈 给你两棵二叉树: root1 和 root2 。 想象一下,当你将其中…...

举个栗子~Tableau 技巧(253):让筛选器只显示全部以及需要的类别

用户反馈了一个需求:我的业务数据有很多类别,但其实经常查看的只有几个,Tableau 筛选器能不能设置一下,只显示全部和经常查看的那几个类别? 这个是可以实现的!如下示例,数据类别有:…...

服务器温度过高告警

今天巡检一套rac环境,发现节点二上有Error字样,逐行看完细节是服务器温度过高导致的,半夜又没啥业务的,查看硬件也没任何告警,哎,某品牌的品控确实越来越烂,log一下 Mar 21 02:53:21 hydb1 ker…...

反垃圾邮件产品测试评价方法示意图

声明 本文是学习信息安全技术 反垃圾邮件产品技术要求和测试评价方法. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 反垃圾邮件产品测试评价方法 测试环境 反垃圾邮件产品的典型测试环境如图1所示。 图1 反垃圾邮件产品典型测试环境示意图 测试设…...

基于vfw的局域网语音聊天室系统源码论文

语音视频聊天 UDP套接字的运用 在实现语音视频聊天时,采用的是基于UDP套接字的点对点模式,而UDP面向的是无连接的数据服务,其套接字的使用如图10所示。 图10 UDP套接字的使用 视频的捕获 利用VFW接口,视频捕获可以分为以下几个步骤: 建立视频采集窗口…...

GoogleTest : 测试框架(单元测试)

GoogleTest googletest: GoogleTest - Google Testing and Mocking Framework googletest 是一个由 Google 的测试技术团队开发的测试框架,它考虑到了谷歌的特定需求和限制。无论你使用的是 Linux、Windows 还是 Mac,只要你编写 C 代码,goo…...

商业银行财富管理“智能原生”能力呈阶梯化,AI助力商业模式趋向多元化发展

易观:金融业的财富管理从经营角度来看,是“客户与渠道管理场景运营产品研发”三位一体共同构建以客户为中心,数据驱动的业务经营体系。其中,“客户与渠道管理”是将客户利益作为核心目标,通过升级用户体验、客户全生命…...

2022年中国云市场份额:阿里云腾讯云下降

我是卢松松,点点上面的头像,欢迎关注我哦! 4月23日,IDC发布《中国公有云服务市场(2022下半年)跟踪》,占据前四的分别为阿里云(40.6%)、华为云(11.0%)、腾讯云(11.0%)、中国电信(8.7%)。咱们说重点,如下图所…...

Redis入门学习笔记【二】Redis缓存

目录 一、Redis缓存 二、Redis使用缓存遇到的问题 2.1 数据一致性 2.2缓存雪崩 2.3 缓存穿透 2.4 缓存击穿 一、Redis缓存 数据缓存是Redis最重要的一个场景,为缓存而生,在springboot中,一般有两种使用方式: 直接通过RedisT…...

go1.20环境安装以及beego框架配置

打开网址下载安装包选择对应安装包来下载安装(个人是windows,下载的1.20.3版本) 默认情况下会安装在C盘,但是我安装在了D盘目录 根据安装提示一步步next,直至完成 go get 在1.18版本之后就弃掉了,换成了install 配置自己的work…...

vue---组件逻辑复用方法:Mixin/HOC/Renderless组件

目录 1、Mixin 2、HOC 3、Renderless组件 下文通过表单校验来分别讲解Mixin/HOC/Renderless组件这三种方式。 1、Mixin 通过mixin将一个公用的validate函数同步到每一个组件中去 mixin使用详细介绍见:vue---mixin混入_maidu_xbd的博客-CSDN博客一个混入对象可…...

阳光万里,祝你上岸——免统考在职研究生

什么是在职研究生 在职研究生,是国家计划内,以在职人员身份,部分时间在职工作,部分时间在校学习的研究生教育的一种类型。在职攻读硕士方式有三种: 1.双证非全日制研究生:为普通高等教育研究生学历&#x…...

大孔树脂型号,A-722,ADS500,ADS600,ADS750,ADS800

一、产品介绍 基于吸附功能的聚苯乙烯特种树脂 Tulsimer ADS-600 是一款没有离子官能基的,由交联聚苯乙烯合成的功能强大的吸附型树脂。 Tulsimer ADS-600 主要应用于水溶液中吸附酚及其化合物,氯代烃等含氯物质,表面活性剂&#xff0…...

MATLAB在逐渐被Python淘汰吗?

Python和MATLAB都是常用的科学计算工具,但是它们有很多不同之处。 Python是一种通用编程语言,而MATLAB主要是用来做数值计算的。Python的基本数据类型和一般的编程语言一样普遍,但是离开了Numpy这个包,就不再有数组或者矩阵的数据…...

黑盒测试过程中【测试方法】讲解1-等价类,边界值,判定表

在黑盒测试过程中,有9种常用的方法:1.等价类划分 2.边界值分析 3.判定表法 4.正交实验法 5.流程图分析 6.因果图法 7.输入域覆盖法 8.输出域覆盖法 9.猜错法 我们一般用第1种和第2种方法最多。此处简单介绍一下这两种方法,详细介绍其…...

函数栈帧的创建和销毁

文章目录 main函数栈帧的创建为什么局部变量的值是随机值函数是怎么传参的?传参的顺序是什么?函数调用结束是怎么返回的 main函数栈帧的创建 先在栈帧里面为main函数开辟出一块空间,且这块空间由两个寄存器esp和ebp来进行维护,当在调用另一个函数时这两个寄存器就去维护为这…...

测试Ocr工具IronOCR(续:编写图片圈选程序)

上一篇文章学习了IronOCR的基本用法之后,计划做一个加载本地图片后,从图片中圈选某一位置的文字,然后调用IronOCR识别圈选区域文本的程序。本文实现从本地加载图片并完成圈选的功能。   主要的功能包括以下几点:   1&#xff…...

React之Redux的使用

文章目录 Redux 介绍概述Redux 是什么?为什么要使用 Redux?我什么时候应该使用 Redux?Redux 库和工具React-ReduxRedux ToolkitRedux DevTools 扩展 Redux 术语和概念State 管理不可变性 Immutability术语ActionAction CreatorReducerReducer…...

数据库系统概论--第五章课后习题

1.什么是数据库的完整性? 答:数据库的完整性是指数据的正确性和相容性。 2. 数据库的完整性概念与数据库的安全性概念有什么区别和联系? 答: 数据的完整性和安全性是两个不同的概念,但是有一定的联系。前者是为了防止数据库中存…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...