Python入门(二十四)异常(一)

这篇具有很好参考价值的文章主要介绍了Python入门(二十四)异常(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.概述

Python使用称为异常的特殊对象来管理程序执行期间发生的错误。每当发生让Python不知所措的错误时,它都会创建一个异常对象。如果你编写了处理该异常的代码,程序将继续运行;如果未对异常进行处理,程序将停止并显示traceback,其中包含有关异常的报告。

异常是使用try-except代码块处理的。try-except代码块让Python执行指定的操作,同时告诉Python发生异常时怎么办。使用try-except代码块时,即便出现异常,程序也将继续运行:显示你编写的友好的错误消息,而不是令用户迷惑的traceback。

2.处理ZeroDivisionError异常

下面来看一种导致Python引发异常的简单错误。你可能知道,不能用数除以0,但还是让Python这样做:

print(5/0)

显然,Python无法这样做,因此你将看到一个traceback:

  Traceback (most recent call last):
    File "division_calculator.py", line 1, in <module>
      print(5/0)
❶ ZeroDivisionError: division by zero

在上述traceback中,❶处指出的错误ZeroDivisionError是个异常对象。Python无法按你的要求做时,就会创建这种对象。在这种情况下,Python将停止运行程序,并指出引发了哪种异常,而我们可根据这些信息对程序进行修改。下面来告诉Python,发生这种错误时怎么办。这样,如果再次发生此类错误,我们就有备无患了。

3.使用try-except代码块

当你认为可能会发生错误时,可编写一个try-except代码块来处理可能引发的异常。你让Python尝试运行一些代码,并告诉它如果这些代码引发了指定的异常该怎么办。

处理ZeroDivisionError异常的try-except代码块类似于下面这样:

try:
    print(5/0)
except ZeroDivisionError:
    print("You can't divide by zero!")

将导致错误的代码行print(5/0)放在一个try代码块中。如果try代码块中的代码运行起来没有问题,Python将跳过except代码块;如果try代码块中的代码导致了错误,Python将查找与之匹配的except代码块并运行其中的代码。

在本例中,try代码块中的代码引发了ZeroDivisionError异常,因此Python查找指出了该怎么办的except代码块,并运行其中的代码。这样,用户看到的是一条友好的错误消息,而不是traceback:

You can't divide by zero!

如果try-except代码块后面还有其他代码,程序将接着运行,因为已经告诉了Python如何处理这种错误。下面来看一个捕获错误后程序继续运行的示例。

4.使用异常避免崩溃

发生错误时,如果程序还有工作尚未完成,妥善地处理错误就尤其重要。这种情况经常会出现在要求用户提供输入的程序中;如果程序能够妥善地处理无效输入,就能再提示用户提供有效输入,而不至于崩溃。

下面来创建一个只执行除法运算的简单计算器:

  print("Give me two numbers, and I'll divide them.")
  print("Enter 'q' to quit.")

  while True:
❶     first_number = input("\nFirst number: ")
      if first_number == 'q':
          break
❷     second_number = input("Second number: ")
      if second_number == 'q':
          break
❸     answer = int(first_number) / int(second_number)
      print(answer)

在❶处,程序提示用户输入一个数,并将其赋给变量first_number。如果用户输入的不是表示退出的q,就再提示用户输入一个数,并将其赋给变量second_number(见❷)。接下来,计算这两个数的商(见❸)。该程序没有采取任何处理错误的措施,因此在执行除数为0的除法运算时,它将崩溃:

Give me two numbers, and I'll divide them.
Enter 'q' to quit.

First number: 5
Second number: 0
Traceback (most recent call last):
  File "division_calculator.py", line 9, in <module>
    answer = int(first_number) / int(second_number)
ZeroDivisionError: division by zero

程序崩溃可不好,但让用户看到traceback也不是个好主意。不懂技术的用户会被搞糊涂,怀有恶意的用户还会通过traceback获悉你不想他知道的信息。例如,他将知道你的程序文件的名称,还将看到部分不能正确运行的代码。有时候,训练有素的攻击者可根据这些信息判断出可对你的代码发起什么样的攻击。文章来源地址https://www.toymoban.com/news/detail-490857.html

到了这里,关于Python入门(二十四)异常(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kafka入门,漏消费和重复消费, 消费者事务,数据积压(二十四)

    重复消费:已经消费了数据,但是offset没提交。 漏消费:先提交offset后消费,有可能会造成数据得漏消费 如果向完成consumer端得进准一次性消费,那么需要Kafka消费端将消费过程和提交offset过程做原子绑定。此时我们需要将kafka的offset保存到支持事务的自定义介质(比如MySQ

    2024年02月15日
    浏览(35)
  • 【Python】【进阶篇】二十四、Python爬虫的Selenium的基本用法

    Selenium 作为一款 Web 自动化测试框架,提供了诸多操作浏览器的方法,本节对其中的常用方法做详细介绍。 Selenium 提供了 8 种定位单个节点的方法,如下所示: 定位节点方法 方法 | 说明 ---|--- find_element_by_id() | 通过 id 属性值定位 find_element_by_name() | 通过 name 属性值定位 find

    2024年02月04日
    浏览(70)
  • 从零开始学习 Java:简单易懂的入门指南之HashMap及TreeMap源码解读(二十四)

    Tip: 1.TreeMap添加元素的时候,键是否需要重写hashCode和equals方法? 此时是不需要重写的。 2.HashMap是哈希表结构的,JDK8开始由数组,链表,红黑树组成的。既然有红黑树,HashMap的键是否需要实现Compareable接口或者传递比较器对象呢? 不需要的。 因为在HashMap的底层,默认是利用

    2024年02月07日
    浏览(36)
  • Python与CAD系列高级篇(二十四)分类提取坐标到excel

    本篇介绍以下功能开发: 1.对点、直线、多段线、圆、样条曲线分类读取坐标;2.提取坐标到excel。 需求: ① 用户选择内容。 ② 对选定内容分类提取坐标。 ③ 提取坐标到excel。 代码实现:

    2024年01月16日
    浏览(31)
  • 从零开始学习 Java:简单易懂的入门指南之异常(二十八)

    异常,就是不正常的意思。在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将受影响.在程序中的意思就是: 异常 :指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。 在Java等面向对象的编程语言中,异常本身

    2024年02月08日
    浏览(53)
  • Python遥感图像处理应用篇(二十四):Python绘制遥感图像各波段热力图(相关系数矩阵)

    给多光谱遥感图像各个波段绘制热力图,首先需要计算波段之间的相关系数矩阵,而计算遥感图像波段相关系数矩阵有不同的方法,常用的我们可以采用遥感图像处理软件计算,比如ENVI软件就可以计算相关系数矩阵,使用工具箱中的Statistics工具即可进行多种统计运算。 我们

    2023年04月09日
    浏览(33)
  • 一个月学通Python(二十八):Python网络数据采集(爬虫)概述(爬虫)

    结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础)》 爬虫(crawler)也经常被称为网络蜘蛛(spider),是按照一定的规则自

    2024年02月14日
    浏览(41)
  • 【二十四】springboot使用EasyExcel和线程池实现多线程导入Excel数据

      springboot篇章整体栏目:  【一】springboot整合swagger(超详细 【二】springboot整合swagger(自定义)(超详细) 【三】springboot整合token(超详细) 【四】springboot整合mybatis-plus(超详细)(上) 【五】springboot整合mybatis-plus(超详细)(下) 【六】springboot整合自定义全局异常

    2023年04月08日
    浏览(51)
  • SpringSecurity(二十四)--OAuth2:使用JWT和加密签名(下)非对称密钥加密

    由于上文对称密钥涉及到的内容比较多,所以这一节的非对称密钥加密拆开成这一节单独讲解。 所以大家尽量先阅读完上一章的内容后再浏览这一章内容会更好。 本节将实现OAuth2身份验证的一个示例,其中授权服务器和资源服务器会使用一个非对称密钥对来对令牌签名和验

    2024年02月16日
    浏览(39)
  • 【Python入门系列】第十四篇:Python Web开发

    PythonWeb开发是使用Python语言进行Web应用程序开发的过程。Python是一种简洁、易读且功能强大的编程语言,因此在Web开发领域广受欢迎。 PythonWeb开发可以涵盖多个方面,包括服务器端开发、数据库管理、前端设计和API开发等。在服务器端开发中,常用的Python Web框架有Django、F

    2024年02月16日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包