[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

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

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

相关文章

OpenText Exceed TurboX (ETX) 安全功能介绍

OpenText Exceed TurboX (ETX) 安全功能介绍 将所有重要的知识产权(IP )相关数据保存在受良好保护的中央数据中心是保护 IP 的最佳做法。安全的远程访问是保护知识产权的关键。 所有数据流量均采用最新标准加密技术进行加密ETX 整合多种身份验证系统ET…

Python爬虫之MongoDB

目录 一、Mongo概述 二、安装&下载 1.下载: 2.安装 三、基本命令 插⼊数据 查询数据 修改数据 删除数据 索引 四、Python与MongoDB交互 1.安装pymongo 2.使⽤ 一、Mongo概述 MongoDB是什么? MongoDB是⾮关系型数据库(No sql) 为啥需要…

吃透Redis面试八股文

Redis连环40问,绝对够全! Redis是什么? Redis(Remote Dictionary Server)是一个使用 C 语言编写的,高性能非关系型的键值对数据库。与传统数据库不同的是,Redis 的数据是存在内存中的&#xf…

原来这就是所谓的 JSR!

相信大家在学习 Java 的过程中,或多或少都见过 JSR 这个词。本篇文章就科普下什么是 JSR。 什么是 JSR ? JSR(Java Specification Requests),是指 Java 规范请求(或者活规范提案)。这个请求&a…

API 自动化测试难点总结与分享

笔者是 API 管理工具的项目参与者之一,在日常工作中会经常遇到 API 自动化测试难点,我决定总结分享给大家: API 自动化测试的难点包括: 接口的参数组合较多,需要覆盖各种可能的情况。 接口的状态和数据关联较多&#…

typescript全局安装卸载以及npm相关问题

全局安装 npm install -g typescript 全局安装之后,如果想要卸载要使用 npm uninstall -g typescript 全局安装之后可以在终端使用 tsc xxx 编译ts文件 本地安装,也就是在项目目录下安装 npm install typescript 本地卸载 npm uninstall type…

2022年中国广义数据智能市场规模为442亿元

数据智能是当前市场上的热点应用。但业界对于数据智能的发展状况,缺乏深入探讨与研究。为了系统梳理中国数据智能行业市场全景,厘清行业发展脉络,为从业者提供有价值的借鉴,海比研究院联合中国软件网、中国软件行业协会应用软件产…

camunda如何处理流程待办任务

在 Camunda 中处理流程任务需要使用 Camunda 提供的 API 或者用户界面进行操作。以下是两种常用的处理流程任务的方式: 1、通过 Camunda 任务列表处理任务:在 Camunda 任务列表中,可以看到当前需要处理的任务,点击任务链接&#…

【谷歌扩展程序入门】简单制作一个查看网页结构的扩展程序

简言 在想看网页结构的时候一般会F12查看元素内容。 太麻烦了 还不简单方便。 扩展程序 扩展建立在诸如 HTML、JavaScript 和 CSS 之类的 Web 技术之上。它们在单独的沙盒执行环境中运行并与 Chrome 浏览器交互。 扩展允许您通过使用 API 修改浏览器行为和访问 Web 内容来“扩…

婚恋交友app开发中需要注意的安全问题

前言 随着移动设备的普及,婚恋交友app已经成为了人们生活中重要的一部分。但是,这些应用的开发者需要确保应用的安全性,以保护用户的隐私和数据免受攻击。本文将介绍在婚恋交友app开发中需要注意的安全问题。 在当今数字化时代,…

程序员面试完之后,人麻了...

去面试吧 面不被录用的试 面hr为了完成任务的试 面一轮二轮没有下文试 面需要通勤2小时的试 面随时加班的试 ...... 今年的“金三银四”被网友们称为“铜三铁四”,招聘软件上的岗位都能背下来了,简历却依然石沉大海。 好不容易等来个回复&#xff…

Linux常用命令——iptables命令

在线Linux命令查询工具 iptables Linux上常用的防火墙软件 补充说明 iptables命令是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。 补充说明 - 语法选项基本参数 - 命令选项输入顺序工作机制…

借由Net5.5G,看到运营商的新沧海

我们都记得这样一句诗:“东临碣石,以观沧海”。 想要看到沧海的壮阔波澜,就先要抵达碣石山这样可以看到大海的地方。在数字化的发展过程中,往往一个技术或产业趋势就是一座碣石山,借由它可以看到描绘着未来机遇的新沧海…

如何使用JMeter和Ant生成高效测试报告?

Jmeter接口自动化测试项目实战视频教程地址:https://www.bilibili.com/video/BV1e44y1X78S/? 目录:导读 引言 一、安装ant 二、ant关联jmeter工具 三、执行 结语 引言 你曾经在进行软件测试时遇到过测试结果难以分析,甚至花费大量时间…

【技巧】如何在微信与企业微信端实现自动化ChatGPT智能机器人服务?(WorkTool)

场景描述 对于使用企业微信办公协作的公司/团体/组织等,在工作的时候,经常需要通过群机器人的方式,回答群内成员的问题。 基于此,一些企业想要将ChatGPT的智能对话能力与企业微信群机器人的回复能力结合,在企业微信群…

【LeetCode: 354. 俄罗斯套娃信封问题 | 暴力递归=>记忆化搜索=>动态规划+二分】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

ClickHouse快速入门

目录 1 ClickHouse介绍1.1 ClickHouse 的特点1.1.1 列式存储1.1.2 DBMS 的功能1.1.3 多样化引擎1.1.4 高吞吐写入能力1.1.5 数据分区与线程级并行1.1.6 性能对比 2 数据类型2.1 整型2.2 浮点型2.3 布尔型2.4 Decimal 型2.5 字符串2.6 枚举类型2.7 时间类型2.8 数组 3 表引擎3.1…

【Linux】6、在 Linux 操作系统中安装软件

目录 一、yum 命令二、安装 wget 一、yum 命令 类似 Linux 中的应用商店 📃① yum 是 RPM 软件包管理器 ✏️ Red-Hat Package Manager 📃② yum 用于自动化安装、配置 Linux 软件(可自动解决依赖问题) 📃③ 语法&a…

十个超级好用的Javascript技巧

概览:在实际的开发工作过程中,积累了一些常见又超级好用的Javascript技巧和代码片段,包括整理的其他大神的JS使用技巧,今天筛选了10个,以供大家参考。 动态加载JS文件 在一些特殊的场景下,特别是一些库和…

再也不去字节跳动面试了,6年测开经验的真实面试经历.....

前几天我朋友跟我吐苦水,这波面试又把他打击到了,做了快6年软件测试员。。。为了进大厂,也花了很多时间和精力在面试准备上,也刷了很多题。但题刷多了之后有点怀疑人生,不知道刷的这些题在之后的工作中能不能用到&…
最新文章