当前位置: 首页 > article >正文

Python编程技巧 – 异常处理

Python编程技巧 – 异常处理

Python Programming Skills – Exception Handling

By Jackson@ML

每一个程序都未必是健壮的,有时候很脆弱。只有在人的理想思维状况下,返回的结果才是正确的,如意的。

1. 错误发生及异常输出

面对种种编写有疏漏的程序,常常会出现错误,下面举出不同的例子,来看会出现哪些问题。
1) 例如,print()语句执行时,缺少了括号,如下代码:

print "Hello, world!"
  File "<stdin>", line 1
    print "Hello, world!"
    ^^^^^^^^^^^^^^^^^^^^^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?

提示Syntax Error(即:语法错误)。

通过以下的例子,可以看到其它异常。除数等于零时,被除数除以它就会报错。

 x = 5 / 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

还有一个例子:

lst = [1, 2, 3]
print(lst[3])

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

仍有一个例子:

d = {'a': 'hello'}
d['b']

  Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
  KeyError: 'b'

提示KeyError,即字典对象的键 ‘b’不存在,导致异常。

我们注意到相关异常的名字都有个共同点,即以Error结尾。在Python编程语言中,error和exception几乎是可以交换使用的。但是,往往错误比异常更加严重。

前述相关的例子中所有的错误类都继承自Exception。

2. 抛出异常

有了异常,就需要着手处理。做项目过程中,实际探究一下Python程序需要通知用户或调用输入不合法的函数,那该如何处理?

先来看以下这个类,用来添加偶数到列表中。

class EvenOnly (list):
    def append(self, integer):
        if not isinstance (integer, int):
            raise TypeError ("Only integers can be added to lists")
        if integer % 2:
            raise ValueError ("Only even numbers can be added to lists")
        super().append(integer)        
e = EvenOnly()
e.append("a string")

在Visual Studio Code中执行,结果如下图所示:

在这里插入图片描述

出现TypeError类型错误!,意思是只有整数能够添加,而字符串“a string”违背了这一原则,因此报错。

修改最后一个语句为:

e.append(3)

执行结果如下图所示:
在这里插入图片描述

这次出现了不一样的报错,即ValueError,属于数值错误,提示仅有偶数可以被添加;由于整数3是奇数,并不是偶数,因此报错。

3. 异常作用

像上述的例子,都属于程序抛出了异常,看起来似乎立即停止了程序运行。这是正常的流程,即抛出异常后,所有代码都不会继续被执行,而是停止,除非处理了异常。

接下来,看一个无返回值的函数,按照这个逻辑来写这个函数,其中,使用Raise抛出一个明确的异常(提醒用户发生了什么):

def novalue_return():
    print("I am going to raise an exception")
    raise Exception("Raised Exception!")
    print("This will never execute.")
    return "No value returned."
novalue_return()

执行结果如下图所示:
在这里插入图片描述
这次,抛出了程序设定的异常,即Exception: Raised Exception! 尽管看起来不是特别详尽,但是这个异常可以自己随意设定。

如果了解到程序有可能抛出最接近的类别的异常,那么输出的异常字符串就能更好更精确地指导程序完善过程,使得代码精进成为可能。

4. 异常处理

异常发现了,也能够自行设定抛出了。那么,当遇到一个异常情况,代码应该如何应对或者从中恢复呢?我们需要恰当的异常处理方法。

使用 try…except 语句块包裹可能抛出的异常的代码,就是不错的选择。修改上述代码如下操作:

def novalue_return():
    print("I am going to raise an exception")
    raise Exception("Raised Exception!")
    print("This will never execute.")
    return "No value returned."
try:
    novalue_return()
except:
    print("An exception was caught!")
print("This will be executed after the exception")

可以看到,在原本需要直接执行的novalue_return()语句,被try … except块包裹,完成后再打印一个语句说明在异常之后执行。

执行该程序如下图所示:

在这里插入图片描述
显而易见,在程序执行中,按照我设定的步骤,由于发生了异常,则执行except块,打印输出An exception was caught!(一个异常被捕获);最后,打印常规语句,说明在异常之后执行。

一旦捕获异常,那么就能够进行代码的善后清理,并且继续执行代码,而不受异常函数的影响。

抛出异常后,novalue_return()函数的剩余代码仍然不会执行,但是调用这个函数的代码能够恢复,并且继续执行。

本文简述了异常的基本机制,异常的出现,如何抛出以及处理异常。感谢您的阅读。


技术好文陆续推出,敬请关注。

喜欢就点赞哈!您的认可,我的动力。😊

相关阅读:

  1. Python编程技巧 - 迭代器(Iterator)
  2. Python编程技巧 - Lambda函数
  3. Python编程技巧 - 使用字典
  4. Python编程技巧 - 使用字符串
  5. Python编程技巧 - 对象和类
  6. Python编程技巧 - 使用列表(List)
  7. Python编程技巧 - 转换二进制、八进制和十六进制的函数
  8. Python编程技巧 - 函数入门
  9. 安装最新版Visual Studio Code来开发Python应用程序
  10. 2023最新版Python 3.12.0安装使用指南

http://www.kler.cn/a/162001.html

相关文章:

  • flutter下拉刷新上拉加载的简单实现方式三
  • java八股-jvm入门-程序计数器,堆,元空间,虚拟机栈,本地方法栈,类加载器,双亲委派,类加载执行过程
  • LabVIEW开发相机与显微镜自动对焦功能
  • ML 系列: 第 23 节 — 离散概率分布 (多项式分布)
  • 系统架构设计师论文
  • Kafka参数了解
  • 黑马头条数据管理平台项目总结
  • 离线数仓构建案例一
  • PostgreSQL 索引介绍和使用事项
  • PyQt6 QDateEdit日期控件
  • 【Python】Python音乐网站数据+音频文件数据抓取(代码+报告)【独一无二】
  • 文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《考虑气电联合需求响应的气电综合能源配网系统协调优化运行》
  • DevOps搭建(一)-之swappiness安装详细步骤
  • Java最全面试题专题---1、Java基础知识(2)
  • 11.Java安卓程序设计-基于SSM框架的Android平台健康管理系统的设计与实现
  • 倚天屠龙:Github Copilot vs Cursor
  • 深入探索C语言中的二叉树:数据结构之旅
  • 【动态规划系列】子数组的最大和
  • java对文件夹,文件操作
  • python操作MySQL——封装增删改查
  • WT2605C蓝牙音频语音芯片:具备大功率IO驱动能力,引领音频技术新纪元
  • 循环中存在异步的情况如何让其正常执行?
  • 突破浅水、低流速,中海达iFlow系列智能型ADCP创新“低”!
  • Module build failed : Error : Vue packages version mismatch:
  • C#中的Attributes特性创建和结合反射应用举例
  • 苏宁商家电话采集软件使用教程