Python语言开发学习—Python异常传递和自定义异常
小职 2021-06-28 来源 :Go语言进阶学习 阅读 974 评论 0

摘要:本文主要介绍了Python语言开发学习—Python异常传递和自定义异常,通过具体的内容向大家展现,希望对大家Python程序开发的学习有所帮助。

本文主要介绍了Python语言开发学习—Python异常传递和自定义异常,通过具体的内容向大家展现,希望对大家Python程序开发的学习有所帮助。

Python语言开发学习—Python异常传递和自定义异常

今天给大家分享一些Python基础 (异常传递和自定义异常),上篇文章有说到:一篇文章带你弄懂Python异常简介和案例分析,这篇文章一起来看看异常其他知识吧~

 

一、异常的传递

1. try嵌套中

import time

 

try:

    f = open('test.txt')

    try:

        while True:

            content = f.readline()

            if len(content) == 0:

                break

            time.sleep(2)

    finally:

        f.close()

        print('关闭文件')

except :

   print("没有这个文件")

finally:

    print("最后的finally")

 

# 这是test.txt文件中读取到信息

运行结果:

 Python语言开发学习—Python异常传递和自定义异常

 

 

2. 函数嵌套调用中

def test1():

     print("----test1-1----")

     print(num)

     print("----test1-2----")

 

 

 def test2():

     print("----test2-1----")

     test1()

     print("----test2-2----")

 

 

 def test3():

     try:

         print("----test3-1----")

         test1()

         print("----test3-2----")

     except Exception as result:

         print("捕获到了异常,信息是:%s"%result)

 

     print("----test3-2----")

 

 

 test3()

 print("------华丽的分割线-----")

 test2()

运行结果:

 Python语言开发学习—Python异常传递和自定义异常

 

 

小总结:

如果try嵌套,那么如果里面的try没有捕获到这个异常,那么外面的try会接收到这个异常,然后进行处理,如果外边的try依然没有捕获到,那么再进行传递。

 

如果一个异常是在一个函数中产生的,例如函数A---->函数B---->函数C,而异常是在函数C中产生的,那么如果函数C中没有对这个异常进行处理,那么这个异常会传递到函数B中,如果函数B有异常处理那么就会按照函数B的处理方式进行执行;如果函数B也没有异常处理,那么这个异常会继续传递,以此类推。。。如果所有的函数都没有处理,那么此时就会进行异常的默认处理。

 

二、抛出自定义的异常

你可以用raise语句来引发一个异常。异常/错误对象必须有一个名字,且它们应是Error或Exception类的子类

 

下面是一个引发异常的例子:

 

class ShortInputException(Exception):

    '''自定义的异常类'''

    def __init__(self, length, atleast):

        #super().__init__()

        self.length = length

        self.atleast = atleast

 

def main():

    try:

        s = input('请输入 --> ')

        if len(s) < 3:

            # raise引发一个你定义的异常

            raise ShortInputException(len(s), 3) #自定义异常长度为3。

             

    except ShortInputException as result:#x这个变量被绑定到了错误的实例

       

        print('ShortInputException: 输入的长度是 %d,长度至少应是 %d'% (result.length, result.atleast))

    else:

        print('没有异常发生.')

 

main()

运行结果:

 Python语言开发学习—Python异常传递和自定义异常

 Python语言开发学习—Python异常传递和自定义异常

 

 

以上程序中,关于#super().init()代码的说明:

 

这一行代码,可以调用也可以不调用,建议调用。

 

因为__init__方法往往是用来对创建完的对象进行初始化工作,如果在子类中重写了父类的__init__方法,即意味着父类中的很多初始化工作没有做,这样就不保证程序的稳定了,所以在以后的开发中,如果重写了父类的__init__方法,最好是先调用父类的这个方法,然后再添加自己的功能。

 

三、异常处理中抛出异常

class Test(object):

    def __init__(self, switch):

        self.switch = switch #开关

    def calc(self, a, b):

        try:

            return a/b

        except Exception as result:

            if self.switch:

                print("捕获开启,已经捕获到了异常,信息如下:")

                print(result)

            else:

                #重新抛出这个异常,此时就不会被这个异常处理给捕获到,从而触发默认的异常处理

                raise

 

a = Test(True)

 

a.calc(11,0)

 

print("----------------------华丽的分割线----------------")

 

a.switch = False

a.calc(11,0)

运行结果:

 Python语言开发学习—Python异常传递和自定义异常

 

 

四、总结

本文基于Python基础,详细的讲解了运行过程中遇到各种异常,应该采取什么样的处理方式,对各种异常提供有效的解决方案。通过一个个小项目实际操作,运行结果展示,能够更好的解决问题。希望可以帮助你更好的学习Python。


我是小职,记得找我

✅ 解锁高薪工作

✅ 免费获取基础课程·答疑解惑·职业测评

Python语言开发学习—Python异常传递和自定义异常

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved