返回顶部
首页 > 资讯 > 后端开发 > Python >Python学习之异常处理详解
  • 930
分享到

Python学习之异常处理详解

2024-04-02 19:04:59 930人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录什么是异常与异常处理异常的语法捕获通用异常捕获具体异常如何捕获多个异常捕获多个异常 - 方法1捕获多个异常 - 方法2本章节主要学习 python 中的异常处理,来看一下该章节的

本章节主要学习 python 中的异常处理,来看一下该章节的内容有哪些。首先我们需要了解 什么是异常与异常的处理 ,然后再继续 异常的语法结构

什么是异常与异常处理

异常 —> 可以理解为不同寻常。

正常情况下,我们的程序是自上而下的逐行执行,执行到最后一行才会终止程序的执行。而异常的情况会导致我们的程序半途而废停止了执行。一般情况下的停止执行都是因为我们的程序出错而造成的,而异常就是错误,异常的出现会导致我们的程序崩溃并停止运行。这在我们的工作中是非常不友好的!

纵观程序的一生,都不能保证说程序一定不会出错。所以当遇到错误的时候,为了不影响程序的执行,我们就需要对这些异常进行处理, Python 中的异常机制,可以监控并捕获到异常。当程序出现错误的时候对异常进行临时妥善的处理,就可以使得程序继续正常的运行。

总结

异常的本质就是错误

异常的出现会导致程序的崩溃且会停止执行

监控异常并捕获,将造成异常的程序进行妥善的处理可以使得程序能够继续正常的运行

接下来我们就快快的看一下 究竟如何捕获异常并进行异常处理的语法吧。

异常的语法

try:                   # 异常的关键字,尝试的意思
    <代码块1>               # 被 try 关键字检查并保护的业务代码块
    
except <异常的类型>:         # 发现异常后的处理关键字,会跟随一个错误类型(异常类型),异常类型可以不填写
    <代码块2>               # try 的代码块出现错误之后,就会执行 except 的代码块
                       # 这里一般都是当 try 代码块出现错误之后的补救逻辑

来看一个简单的示例:

1 / 0		# 我们都知道 0 不能被整除,所以产生了下面这样的报错

# >>> 执行结果如下
# >>> ZeroDivisionError: division by zero 

# >>> 我们管代码的报错叫做 异常的抛出 ,这个报错信息告诉了我们为什么报错,同时业务也会被停止。
# >>> 在程序中,我们是允许出错的,但是需要对可能遇见的异常捕获,
# >>> 进行合理的处理,让程序遇到异常可以合理的运行

看一下针对上文示例的异常进行的捕获

try:
    1 / 0
except:
    print('注意:0 不可以被 1 整除')
    print('ZeroDivisionError: division by zero 已捕获,程序继续执行')

# >>> 执行结果如下
# >>> 注意:0 不可以被 1 整除
# >>> ZeroDivisionError: division by zero 已捕获,程序继续执行

# >>> 虽然 try 代码块抛出了异常,但是我们通过 except 进行了合理的规避,使得我们的程序继续向下执行

接下来我们再利用我们之前学到的知识点 upper() 函数做一个小案例:

定义一个 upper ,利用 upper() 函数 。将传入的字符串转为大写,如传入参数非 字符串 ,捕获该异常并处理。

def upper(str_data):
    new_str = None

    try:
        new_str = str_data.upper()
    except:
        print('upper() 函数转换字符大写失败!', '返回结果为:', new_str)
    return new_str


result = upper('test')
print('传入参数返回值为:', result)

# >>> 执行结果如下:
# >>> 传入参数返回值为: TEST


result = upper(1)
print(result)

# >>> 执行结果如下:
# >>> upper() 函数转换字符大写失败! 返回结果为: None

捕获通用异常

刚刚我们通过 try…except… 捕获了异常并进行了合理的处理,但是我们并不知道错误的原因是什么。所以我们必须获取 异常的类型 ,首先我们来学习一下如何获取通用异常类型, 通用异常类型 是我们无法确定是那种异常的情况下使用的一种捕获方法。

用法如下:

try:
    <代码块>
except Exception as e:        # 把通用异常的错误原因转换成变量 e , as 为关键字
                            # 也可以理解为 将 Exception 通用异常类型 起一个别名 e
                            # e 变量名可以起任意名字,一般约定成俗都会使用 e 作为异常捕获的变量名
                            # e 就是 error 的缩写
    <异常代码块>

通用异常捕获示例如下:

def upper(str_data):
    new_str = None

    try:
        new_str = str_data.upper()
    except Exception as e:
        print('upper() 函数转换字符大写失败!', '返回结果为:{}'.fORMat(e))
    return new_str


result = upper(1)
print(result)


# >>> 执行结果如下:
# >>> upper() 函数转换字符大写失败! 返回结果为:'int' object has no attribute 'upper'

捕获具体异常

捕获具体的异常就是我们可以确定在 try 的代码块中会出现哪种具体的异常类型,并将其捕获的方法。语法方面与通用异常一样,在异常类型区域书写 具体的异常类型 就可以了。

我们以上文的 ZeroDivisionError: division by zero 为例

try:
    1 / 0
except ZeroDivisionError as e:		# 书写指定的异常类型:ZeroDivisionError
    								# ZeroDivisionError 是Python内置的具体异常:0不能被整除
    print(e)

# >>> 执行结果如下:
# >>> division by zero

小节:思考一个问题,工作中我们是使用 通用的异常 还是 具体的异常 呢?

从方便的角度来说,使用通用的异常会比较简单。开发成本低,不需要关心具体的异常类型是什么。其实 Exception 也不知知道具体的异常是哪一种类型,它需要去浩瀚的异常库查找,找到之后进行对应的抛出,虽然没有 具体指定异常 处理的那么快,但是这个处理速度也是无感知的。

如果我们能知道 try 代码块中 可能出现的具体异常类型,还是希望使用具体的异常类型。这样可以精准的对应错误;

==需要注意的是:当我们的 try 代码块中,没有出现我们指定的 具体异常 类型,代码执行依然是会报错的。==所以各有利弊,可以根据我们工作中业务的具体情况进行使用。

如何捕获多个异常

在我们平时的开发工作中,很可能在同一个代码块中出现多个异常类型。那么我们该如何支持多个异常的捕获呢?

其实异常的捕获是非常灵活的,也支持多个异常捕获的方式。

捕获多个异常 - 方法1

try:
    result = 1 / 0
except ZeroDivisionError as e1:
    print(e1)
except Exception as e2:            # 可以使用多个 except 来捕获多个异常
    print('this is a public except , bug is %s' % e2)
    
# >>> 需要注意的是,当 except 代码块中有多个异常的时候,当捕获到第一个异常后,不会在继续往下捕获。

需要注意的是,当 except 代码块中有多个异常的时候,当捕获到第一个异常后,不会在继续往下捕获。

捕获多个异常 - 方法2

try:
    result = 1 / 0
except (ZeroDivisionError, Exception) as e:        # 在 except 后面的小括号内定义多个 异常类型 ,(小括号其实是元组)
                                                # 当 except 后面使用元组包裹多个 异常类型 时,捕获到哪种异常类型就抛出哪种
    print(e)

示例如下:

def test():

    try:
        print(name)     # 因为不存在 name 这个变量,所以会抛出一个 NameError: name 'name' is not defined 异常
                        # 尝试捕获  NameError 异常
    except (ZeroDivisionError, NameError) as e:
        print(e)
        print(type(e))


test()

# >>> 执行结果如下:
# >>> name 'name' is not defined
# >>> <class 'NameError'>

比较常用的捕获异常方法是第二种。

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

--结束END--

本文标题: Python学习之异常处理详解

本文链接: https://lsjlt.com/news/142345.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python学习之异常处理详解
    目录什么是异常与异常处理异常的语法捕获通用异常捕获具体异常如何捕获多个异常捕获多个异常 - 方法1捕获多个异常 - 方法2本章节主要学习 python 中的异常处理,来看一下该章节的...
    99+
    2024-04-02
  • python学习之异常处理
    一、语法导致的异常,应该在程序运行前处理 例子: print( 输出: File "E:/python/oldboyday9/learn1.py", line 4     if      ^ SyntaxError: invalid sy...
    99+
    2023-01-31
    异常 python
  • Python学习之异常断言详解
    该章节我们来学习 异常的最后一个知识点 - 断言 ,断言是判断一个表达式,在表达式为 False 的时候触发异常。表达式我们可以对号入座,可以是条件语句中的声明,也可以是是 whil...
    99+
    2024-04-02
  • Python学习 :异常处理
      异常处理   什么是异常处理   - python解释器检测到错误,触发异常(也允许程序员自己触发了异常)   - 程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,只与异常处理有关)   - 如果捕捉成功则进入另外...
    99+
    2023-01-30
    异常 Python
  • SpringMVC学习之JSON和全局异常处理详解
    目录1.为什么要全局异常处理2.异常处理思路3.SpringMVC异常分类4.综合案例         ...
    99+
    2022-11-13
    springmvc全局异常处理 springmvc的json问题 spring mvc json
  • Python学习之自定义异常详解
    目录自定义抛出异常关键字 - raise演示小案例 - 1演示小案例 - 2自定义异常类总结在上一章我们学习了 异常的三个关键字,分别是try、except 以及 finally。我...
    99+
    2024-04-02
  • Spring Boot学习入门之统一异常处理详解
    前言关于之前的一篇所讲到的表单验证中提到,如果产生错误,可以得到错误的信息,但是返回值的问题却没有考虑。其中所提到的Controller:@RequestMapping(value = "/doRegister", method = Req...
    99+
    2023-05-31
    spring boot 统一异常处理
  • Java异常学习之自定义异常详解
    前言哎呀,妈呀,又出异常了!俗话说:“代码虐我千百遍,我待代码如初恋”。小Alan最近一直在忙着工作,已经很久没有写写东西来加深自己的理解了,今天来跟大家聊聊Java异常。Java异常的体系什么的,理论知识啥的我就懒得去BB太多了,是个搞J...
    99+
    2023-05-31
    java 自定义异常 ava
  • Python学习之异常处理的避坑指南
    目录finally 与 return 的执行顺序else 与 return 的执行顺序总结最终想了想,还是把这个章节单独拎出来,虽然字数不多。 在代码中,存在return也应当执行f...
    99+
    2024-04-02
  • C++学习之异常机制详解
    目录1. 异常处理机制介绍2. 如何抛出异常和捕获异常2.1 抛出异常2.2 捕获异常3. 如何实现自己的异常4. 注意事项5. 面试常问的题目6. 答案7. 总结1. 异常处理机制...
    99+
    2023-05-15
    C++异常机制 C++异常
  • Python学习之异常中的finally使用详解
    目录finally的功能与用法finally示例案例finally触发的必然性与优先级try语法伴随except或finally的必然性finally的历史今天我们来学习一下 异常语...
    99+
    2024-04-02
  • Python学习笔记9——异常处理
    就看这篇博客吧:一篇搞定所有的异常处理,讲的很详细。 异常 Python中各种异常也是类,类Exception继承自类BaseException,还有其他各种异常等等,此外,通过继承BaseException或者Exception可以自定...
    99+
    2023-01-30
    学习笔记 异常 Python
  • python基础学习15----异常处理
    异常处理,是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常状况(即超出程序正常执行流程的某些特殊条件)。 1.异常的类型 异常的类型多种多样,常见的异常有: AttributeError 试图访问一个对象没有的属性...
    99+
    2023-01-30
    异常 基础 python
  • C++学习笔记之浅谈异常处理
    异常处理主要是针对能通过编译但是运行是在某个特定条件下会出现异常,程序崩溃,结果出错。来进行的东西 C++处理异常的机制是由3个部分组成的,即检查(try)、抛出(throw)和捕捉...
    99+
    2024-04-02
  • Python异常处理详解
    在shell脚本中,常用if来判断程序的某个部分是否可能会出错,并在if的分支中做出对应的处理,从而让程序更具健壮性。if判断是异常处理的一种方式,所有语言都通用。对于特性完整的编程语言来说,都有专门的异常处理机制,有些语言用起来可能会很...
    99+
    2023-01-30
    详解 异常 Python
  • Python学习手册之Python异常和
    在上一篇文章中,我们介绍了 Python 的函数和模块,现在我们介绍 Python 中的异常和文件。 查看上一篇文章请点击:https://www.cnblogs.com/dustman/p/9963920.html 异常和文件 异常 异...
    99+
    2023-01-30
    异常 手册 Python
  • python3学习之异常
    ##异常处理 #try: #    pass #except Exception as ex:   Exception(捕获所有错误)可以换成任何异常类型,代表只捕获指定错误, # 可以写多个except #    pass ##异常类型...
    99+
    2023-01-31
    异常
  • Python基础教程之异常处理详解
    目录前言异常错误与异常语法错误异常异常处理自主抛出异常自定义异常finally子句总结前言 最近发现有些东西长时间不用就要忘了,坚持每天复习总结一个小知识点吧~ 异常是什么呢?就是在...
    99+
    2023-05-14
    python如何进行异常处理 python 异常 python程序异常处理例题
  • Python学习笔记整理(十七)异常处理
    一、异常基础 try/except:捕捉由代码中的异常并恢复,匹配except里面的错误,并自行except中定义的代码,后继续执行程序(发生异常后,由except捕捉到异常后,不会中断程序,继续执行try语句后面的程序) ...
    99+
    2023-01-31
    学习笔记 异常 Python
  • Python学习—异常
    一.异常处理的定义   python解释器检测到错误,触发异常(也允许程序员自己触发异常)   程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关)   如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻...
    99+
    2023-01-31
    异常 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作