Python 异常处理总结

 更新时间:2021年9月24日 16:00  点击:2386

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

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

其中一些错误可能会导致程序突然终止。在 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
恭喜! 你猜对了

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

4、Python 内置异常

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

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

到此这篇关于Python 异常处理详情的文章就介绍到这了,更多相关Python 异常处理内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

[!--infotagslink--]

相关文章

  • python opencv 画外接矩形框的完整代码

    这篇文章主要介绍了python-opencv-画外接矩形框的实例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-04
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • 最炫Python烟花代码全解析

    2022虎年新年即将来临,小编为大家带来了一个利用Python编写的虎年烟花特效,堪称全网最绚烂,文中的示例代码简洁易懂,感兴趣的同学可以动手试一试...2022-02-14
  • python中numpy.empty()函数实例讲解

    在本篇文章里小编给大家分享的是一篇关于python中numpy.empty()函数实例讲解内容,对此有兴趣的朋友们可以学习下。...2021-02-06
  • python-for x in range的用法(注意要点、细节)

    这篇文章主要介绍了python-for x in range的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-10
  • Python 图片转数组,二进制互转操作

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • python实现b站直播自动发送弹幕功能

    这篇文章主要介绍了python如何实现b站直播自动发送弹幕,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下...2021-02-20
  • python Matplotlib基础--如何添加文本和标注

    这篇文章主要介绍了python Matplotlib基础--如何添加文本和标注,帮助大家更好的利用Matplotlib绘制图表,感兴趣的朋友可以了解下...2021-01-26
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • python 计算方位角实例(根据两点的坐标计算)

    今天小编就为大家分享一篇python 计算方位角实例(根据两点的坐标计算),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27
  • python实现双色球随机选号

    这篇文章主要为大家详细介绍了python实现双色球随机选号,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-05-02
  • python中使用np.delete()的实例方法

    在本篇文章里小编给大家整理的是一篇关于python中使用np.delete()的实例方法,对此有兴趣的朋友们可以学习参考下。...2021-02-01
  • 使用Python的pencolor函数实现渐变色功能

    这篇文章主要介绍了使用Python的pencolor函数实现渐变色功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-09
  • python自动化办公操作PPT的实现

    这篇文章主要介绍了python自动化办公操作PPT的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-05
  • Python getsizeof()和getsize()区分详解

    这篇文章主要介绍了Python getsizeof()和getsize()区分详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-20
  • python实现学生通讯录管理系统

    这篇文章主要为大家详细介绍了python实现学生通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-25
  • PyTorch一小时掌握之迁移学习篇

    这篇文章主要介绍了PyTorch一小时掌握之迁移学习篇,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-08
  • 解决python 两个时间戳相减出现结果错误的问题

    这篇文章主要介绍了解决python 两个时间戳相减出现结果错误的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-12
  • Python绘制的爱心树与表白代码(完整代码)

    这篇文章主要介绍了Python绘制的爱心树与表白代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-06