Python 异常处理总结

作者:海拥 时间:2021-10-21 21:10:19 

目录
  • 一、Python 异常处理:错误与异常

    • 1、什么是错误?

    • 2、什么是异常?

  • 二、如何使用 Try-Except 处理异常?

    • 1、什么是 Try-Except 语句?

    • 2、Python 异常处理语法

    • 3、Python 异常处理示例

  • 三、用 Except 处理所有类型的异常

    • 1、例子

  • 四、用 except 处理多个异常

    • 1、例子

  • 五、如何使用 Try-Finally 处理异常?

    • 1、什么是 Try-Finally 语句?

    • 2、例子

  • 六、用参数引发异常

    • 1、什么是提升?

    • 2、提升语法

    • 3、加注示例

  • 七、在 Python 中创建自定义异常

    • 1、什么是自定义异常?

    • 2、在 Python 中创建异常类

    • 3、例子

    • 4、Python 内置异常

  • 八、总结——Python异常处理概念

    异常处理对于创建健壮和稳定的应用程序非常重要。它鼓励程序员编写干净、可读和无错误的代码。

    您会同意,即使是最好的代码也可能在运行时出现意外行为。这可能是由于缺少配置,或者执行环境发生了变化,或者用户输入了错误的输入。

    其中一些错误可能会导致程序突然终止。在 Python 异常处理的帮助下,我们可以管理上述问题并避免我们的代码间歇性失败。

    首先,我们必须了解错误和异常之间的区别。因此,我们将教您 Python 异常处理的基本知识。

    一、Python 异常处理:错误与异常

    1、什么是错误?

    错误是程序中出现的错误,例如语法错误。

    它发生在编译时。让我们看一个例子


    if a<5
    File "<interactive input>", line 1
       if a < 5
              ^
    SyntaxError: invalid syntax

    2、什么是异常?

    错误也会在运行时发生,我们将它们称为异常。异常是在程序执行期间发生并中断程序指令正常流程的事件。

    通常,当 Python 脚本遇到它无法处理的错误情况时,它会引发异常。

    Python 脚本引发异常时,它会创建一个异常对象。

    通常,脚本会立即处理异常。如果它不这样做,那么程序将终止并打印对错误的追溯及其下落。


    >>> 1 / 0
    Traceback (most recent call last):
    File "<string>", line 301, in run code
    File "<interactive input>", line 1, in <module>
    ZeroDivisionError: division by zero

    二、如何使用 Try-Except 处理异常?

    1、什么是 Try-Except 语句?

    我们使用 try-except 语句在 Python 程序中启用异常处理。

    try 块中,您编写可以引发异常的代码。

    而处理或捕获异常的代码,我们放在except子句中。

    2、Python 异常处理语法

    以下是Python try-except-else 块的语法


    try:
    你在这里做你的操作;
    ......................
    except ExceptionI:
    如果有 ExceptionI,则执行此块
    except ExceptionII:
    如果有 ExceptionII,则执行此块
    ......................
    else:
    如果没有异常则执行此块。

    看一看 – 30 个 Python 教程和技巧

    这是有效使用 Python try 语句的清单。

    • 根据需求,单个 try 语句可以有多个 except 语句。在这种情况下,try 块包含可以抛出不同类型异常的语句。

    • 我们还可以添加一个通用的 except 子句,它可以处理所有可能的异常类型。

    • 我们甚至可以在except子句之后包含一个else子句。如果 try 块中的代码没有引发异常,则 else 块中的指令将执行。

    3、Python 异常处理示例

    让我们通过一个示例代码来了解 Python try-except 的使用。


    try:
      fob = open("test", "w")
      fob.write("这是我的异常处理测试文件")
    except IOError:
      print
      "错误:找不到文件或读取数据"
    else:
      print
      "对文件执行写操作成功"
      fob.close()

    上面的代码产生以下输出。

    >>对文件执行写操作成功

    让我们再举一个例子,在这个例子中我们试图以 READ 模式打开一个文件。

    我们将对其执行 WRITE 操作。执行时会抛出异常。


    try:
      fob = open("test", "r")
      fob.write("这是我的测试文件,用于验证 Python 中的异常处理")
    except IOError:
      print
      "错误:找不到文件或读取数据"
    else:
      print
      "对文件执行写操作成功"

    上面的代码产生以下输出。

    >>错误:找不到文件或读取数据

    三、用 Except 处理所有类型的异常

    如果我们使用一个空的 “except” 子句,那么它将捕获所有类型的异常。

    然而,这既不是一个好的编程习惯,也没有人推荐它。

    这是因为这样的 Python try-except 块可以处理所有类型的异常。但是它不会帮助程序员找到导致问题的异常。

    您可以通过以下代码查看如何捕获所有异常。

    1、例子


    try:
      你在这里做你的操作;
      ......................
    except:
      如果有任何异常,则执行此块
      ......................
    else:
      如果没有异常则执行此块

    四、用 except 处理多个异常

    我们可以使用相同的 except 子句定义多个异常。这意味着如果 Python 解释器找到匹配的异常,那么它将执行在 except 子句下编写的代码。

    简而言之,当我们这样定义except子句时,我们期望同一段代码抛出不同的异常。此外,我们希望在每种情况下都采取相同的行动。

    请参考下面的例子。

    1、例子


    try:
      你在这里做你的操作;
      ......................
    except(Exception1[, Exception2[,...ExceptionN]]]):
      如果给定的异常列表中有任何异常,
      然后执行这个块
      ......................
    else:
      如果没有异常则执行此块

    五、如何使用 Try-Finally 处理异常?

    1、什么是 Try-Finally 语句?

    我们还可以借助 try-finally 语句启用 Python 异常处理。

    使用 try 块,我们还可以选择定义“ finally ”块。该子句允许定义我们想要执行的语句,无论 try 块是否引发异常。

    此功能通常在释放外部资源时出现。

    这是帮助的编码片段。


    try:
      你在这里做你的操作;
      ......................
      由于任何异常,这可能会被跳过
    finally:
      这将始终被执行
      ......................

    2、例子

    一个关键点是我们可以为每个 try 块定义一个“ except ”或“ finally ”子句。你不能把这些放在一起。此外,您不应将“ else ”子句与“ finally ”子句一起使用。

    让我们举一个例子来更清楚。


    try:
       fob = open('test', 'w')
       fob.write("这是我在异常处理中验证 try-finally 的测试文件")
       print 'try 块执行'
    finally:
       fob.close()
       print 'finally 块执行'

    如果未发生异常,则您将看到以下输出。

    >>try 块执行
    >>finally 块执行

    假设我们以READ模式打开文件,然后尝试对其执行写操作。在这种情况下,下面的代码将有助于处理异常。


    try:
       fob = open('test', 'r')
       try:
           fob.write("这是我在异常处理中验证 try-finally 的测试文件")
           print 'try 块执行'
       finally:
           fob.close()
           print 'finally 块执行以关闭文件'
    except IOError:
       print "错误:找不到文件或读取数据"

    在这种情况下,解释器将引发异常,并显示以下输出。

    >>finally 块执行以关闭文件
    >>错误:找不到文件或读取数据

    当某些代码在 try 块中引起异常时,执行会立即传递到“ finally ”块。“ finally ”块中的语句全部执行完毕后,异常恢复到“ except ”块执行。但是必须存在“ try-except ”语句的下一个更高层。

    六、用参数引发异常

    1、什么是提升?

    我们可以使用 raise 关键字强制引发异常。

    我们还可以选择将值传递给异常并指定它发生的原因。

    2、提升语法

    这是调用“ raise ”方法的语法。


    raise [Exception [, args [, traceback]]]

    在哪里,

    • 在 “Exception”下- 指定其名称。

    • args ”是可选的,表示异常参数的值。

    • 最后一个参数 “traceback” 也是可选的,如果存在,则是用于异常的回溯对象。

    让我们举一个例子来证明这一点。

    3、加注示例


    >>> raise MemoryError
    Traceback (most recent call last):
    ...
    MemoryError

    >>> raise MemoryError("This is an argument")
    Traceback (most recent call last):
    ...
    MemoryError: This is an argument

    >>> try:
         a = int(input("Enter a positive integer value: "))
        if a <= 0:
               raise ValueError("This is not a positive number!!")
       except ValueError as ve:
         print(ve)

    Following Output is displayed if we enter a negative number:

    Enter a positive integer: –5

    This is not a positive number!!

    七、在 Python 中创建自定义异常

    1、什么是自定义异常?

    自定义异常是程序员自己创建的异常。

    他通过添加一个新类来做到这一点。这里的技巧是从基本异常类派生自定义异常类。

    大多数内置异常也有相应的类。

    2、在 Python 中创建异常类


    >>> class UserDefinedError(Exception):
    ...     pass

    >>> raise UserDefinedError
    Traceback (most recent call last):
    ...
    __main__.UserDefinedError

    >>> raise UserDefinedError("An error occurred")
    Traceback (most recent call last):
    ...
    __main__.UserDefinedError: An error occurred

    在上面的代码片段中,您可以看到我们创建了一个用户定义的异常类,“ UserDefinedError ” 。它使用基 Exception 类作为父类。因此,新的用户定义异常类将像任何其他异常类一样引发异常,即通过调用带有可选错误消息的“ raise ”语句。

    让我们举个例子。

    3、例子

    在此示例中,我们将展示如何在程序中引发用户定义的异常并捕获错误。

    该程序提示用户一次又一次地输入字母表,直到他只输入存储的字母表为止。

    为了寻求帮助,该程序会向用户提供提示,以便他可以找出正确的字母表。此外,他可以检查他的猜测是否高于或低于存储的字母表。


    #定义 Python 用户定义的异常
    class Error(Exception):
      """Base class for other exceptions"""
      pass

    class InputTooSmallError(Error):
      """Raised when the entered alpahbet is smaller than the actual one"""
      pass

    class InputTooLargeError(Error):
      """Raised when the entered alpahbet is larger than the actual one"""
      pass

    #我们的主程序
    #用户猜测一个字母,直到他/她猜对了

    #你需要猜这个字母
    alphabet = 'm'

    while True:
      try:
          apb =  input("输入一个字母: ")
          if apb < alphabet:
              raise InputTooSmallError
          elif apb > alphabet:
              raise InputTooLargeError
          break
      except InputTooSmallError:
          print("输入的字母太小,再试一遍!")
          print('')
      except InputTooLargeError:
          print("输入的字母太大,再试一遍!")
          print('')

    print("恭喜! 你猜对了")

    让我们通过提供不同的输入来测试这个程序。


    输入一个字母:c
    输入的字母太小,再试一遍!

    输入一个字母:s
    输入的字母太大,再试一遍!

    输入一个字母:q
    输入的字母太大,再试一遍!

    输入一个字母:k
    输入的字母太小,再试一遍!

    输入一个字母:m
    恭喜! 你猜对了

    Python 异常处理总结

    因此你可以看到我们在这个程序中定义了一个名为 Error 的基类。它引发了从基类派生的两个异常(“ InputTooSmallError ”和“ InputTooLargeError ”)。这是在 Python 编程中定义用户定义异常的标准方法。

    4、Python 内置异常

    Python 异常处理总结

    Python 异常处理总结

    八、总结——Python异常处理概念

    大多数时候,我的目标是发现一个可以帮助读者工作的主题。这就是我们介绍本篇关于 Python 异常处理的原因。如果您喜欢这篇文章并有兴趣看到更多此类文章,可以看看这里(Github/Gitee) 关注我以查看更多信息,这里汇总了我的全部原创及作品源码

    来源:https://juejin.cn/post/6987927255724851208

    标签:Python,异常处理
    0
    投稿

    猜你喜欢

  • sklearn线性逻辑回归和非线性逻辑回归的实现

    2021-06-16 04:04:31
  • div + ajax + 分页函数

    2009-10-18 11:28:00
  • 图神经网络GNN算法基本原理详解

    2023-08-08 23:53:53
  • Django实现上传图片功能

    2022-01-06 13:57:44
  • Python使用crontab模块设置和清除定时任务操作详解

    2023-02-07 15:13:37
  • 详解php处理大并发大流量大存储

    2023-07-21 13:11:02
  • Python中如何使用Matplotlib库绘制图形

    2021-09-27 11:59:04
  • python 实现二维数组的索引、删除、拼接操作

    2021-03-01 10:28:08
  • 给页面加上Loading效果最简单实用的办法

    2008-11-20 11:58:00
  • css:小技巧大问题,cellSpacing用css样式代替方法,其它样式类似解决!

    2009-10-04 20:35:00
  • Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)

    2021-09-14 00:22:11
  • Python try except异常捕获机制原理解析

    2023-04-12 20:00:35
  • Flask和Django框架中自定义模型类的表名、父类相关问题分析

    2022-04-04 00:23:17
  • JAVASCRIPT实现的WEB页面跳转以及页面间传值方法

    2023-08-23 04:56:09
  • golang微服务框架基础Gin基本路由使用详解

    2023-07-23 10:31:19
  • JavaScript实现淘宝网图片的局部放大功能

    2023-08-25 05:44:56
  • Python实现绘制3D地球旋转效果

    2021-04-17 22:25:37
  • Pycharm激活码激活两种快速方式(附最新激活码和插件)

    2023-05-17 12:07:07
  • PHP实现将浏览历史页面网址保存到cookie的方法

    2023-08-16 05:25:29
  • MySQL数据库中使用GRANT语句增添新用户

    2008-12-17 14:45:00
  • asp之家 网络编程 m.aspxhome.com