当前位置: 首页 > 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. 数据库的完整性概念与数据库的安全性概念有什么区别和联系? 答: 数据的完整性和安全性是两个不同的概念,但是有一定的联系。前者是为了防止数据库中存…...

从“杯子放球”到“射击命中”:用Python模拟帮你彻底搞懂离散随机变量

从“杯子放球”到“射击命中”:用Python模拟帮你彻底搞懂离散随机变量 概率论中的离散随机变量概念常常让初学者感到抽象难懂。传统的数学推导虽然严谨,但缺乏直观性。本文将带你用Python代码亲手模拟几个经典概率问题,通过可视化手段让这些概…...

终极密码恢复指南:如何使用ArchivePasswordTestTool轻松破解加密压缩包

终极密码恢复指南:如何使用ArchivePasswordTestTool轻松破解加密压缩包 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool 你是否曾…...

3分钟搞定:Windows免iTunes安装苹果驱动终极指南

3分钟搞定:Windows免iTunes安装苹果驱动终极指南 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.com/gh_mirrors/…...

ROS机器人仿真平台深度解析:从Gazebo集成到多模态感知系统架构设计

ROS机器人仿真平台深度解析:从Gazebo集成到多模态感知系统架构设计 【免费下载链接】wpr_simulation 项目地址: https://gitcode.com/gh_mirrors/wp/wpr_simulation 技术原理深度解析 ROS-Gazebo协同仿真架构 WPR仿真平台基于ROS(Robot Operat…...

视频修复终极指南:3步拯救你的损坏视频文件

视频修复终极指南:3步拯救你的损坏视频文件 【免费下载链接】untrunc Restore a damaged (truncated) mp4, m4v, mov, 3gp video. Provided you have a similar not broken video. 项目地址: https://gitcode.com/gh_mirrors/unt/untrunc 你是否曾经遇到过这…...

Proteus仿真进阶:用STM32F103驱动L298,深入理解PWM占空比与电机速度的映射关系

Proteus仿真进阶:用STM32F103驱动L298,深入理解PWM占空比与电机速度的映射关系 在嵌入式开发中,电机控制是一个经典且实用的课题。很多教程会告诉你如何通过STM32的PWM输出让电机转起来,但很少有人解释为什么代码中会出现"10…...

FalkorDB 的边存储原理:为什么查邻居是 O(degree)?

很多人第一次看到 FalkorDB 的架构时,会有一个疑问:它不用传统 adjacency list(邻接链表),而是用 sparse matrix(稀疏矩阵)维护边,那它到底怎么高效找到某个节点的所有边&#xff1f…...

非线性声学与强化学习融合的智能声学处理技术

1. 非线性声学与强化学习的融合框架解析在复杂声学环境中,传统线性声学模型往往难以应对高阶声学现象。非线性声学理论通过Westervelt方程和KZK方程等物理模型,能够准确描述声波在非线性介质中的传播特性。这些方程考虑了介质压缩性和边界反射等非线性效…...

2026年大模型内容精准收录实操,企业长效流量布局核心方法论

引言:大模型正在成为企业品牌认知的新前置入口。当越来越多用户绕过搜索引擎、直接向AI提问"哪家公司更适合""某个方案值不值得选"时,企业在AI回答中的位置、语气和引用来源,已经构成真实的竞争格局。本文将从大模型内容…...

Aspia文本聊天功能:内置即时通讯的远程协助工具

Aspia文本聊天功能:内置即时通讯的远程协助工具 【免费下载链接】aspia Remote desktop and file transfer tool. 项目地址: https://gitcode.com/gh_mirrors/as/aspia Aspia是一款功能强大的远程桌面和文件传输工具,其内置的文本聊天功能为远程协…...