首页 > 其他 > 详细

异常处理

时间:2020-09-15 21:41:17      阅读:51      评论:0      收藏:0      [点我收藏+]

异常是错误发生的信号,一旦程序出错就会产生一个异常,
如果该异常没有被应用程序处理,那么该异常就会抛出来,程序的执行也随之终止。

异常包含三个部分:

    1. traceback异常的追踪信息
    2. 异常的类型
    3. 异常的信息

技术分享图片

 

 

 错误分为两大类:
1.语法上的错误:在程序运行前就应该立即修正
2.逻辑上的错误

二、为何要异常处理

避免程序因为异常而崩溃,所以在应用程序中应该对异常进行处理,从而增强程序的健壮性

三、如何异常处理

try:  #try监听下面的代码块
    代码1
    代码2
    代码3
    ......
except NameError:
    当抛出的异常时 NameError时执行的子代码块
# 异常处理:
try:
    print(====>1)
    print(====>2)
    print(====>3)
    l = [1,2,3]
    l[100] #IndexError  #运行到此处直接跳到except下的代码块
    print(====>4)  #不执行
except IndexError:
    print(IndexError)
#异常处理多分支
try:
    print(====>1)
    print(====>2)
    print(====>3)
    l = [1,2,3]
    d = {x:1,y:2}
    d[z] #KeyError
    l[100] #IndexError  #运行到此处直接跳到except下的代码块
    print(====>4)  #不执行
except IndexError:
    print(IndexError)
except KeyError:
    print(KeyError)

print(other code)
try:
    print(====>1)
    print(====>2)
    print(====>3)
    l = [1,2,3]
    d = {x:1,y:2}
    # d[‘z‘] #KeyError
    # l[100] #IndexError
    print(====>4)  #不执行
except (KeyError,IndexError) as e:  #(KeyError,IndexError)捕捉其中一种异常
    print(e)

万能异常类型 Exception :可以捕捉任意类型的异常

try:
    print(====>1)
    print(====>2)
    print(====>3)
    l = [1,2,3]
    d = {x:1,y:2}
    d[z] #KeyError
    l[100] #IndexError
    print(====>4)  #不执行
except Exception as e:  # as 给异常起别名
    print(e)
print(other code)

try + else...: else必须放到后面,else的子代码块会在被检测的代码没有异常的情况下执行

try:
    print(=====1)
    print(=====2)
    print(=====3)
    d = {x: 1, y: 2}
    # d[‘z‘]  # KeyError
    # xxx
    print(=====4)
    l = [1, 2, 3]
    # l[1000]  # IndexError
    print(=====5)
except IndexError as e:
    print(IndexError:, e)
except KeyError as e:
    print(KeyError:, e)
except Exception as e:
    print(Exception:,e)
else:
    print(else必须放到后面,else的子代码块会在被检测的代码没有异常的情况下执行)
print(other code)

try + finally... :无论finally前面被检测的代码有没有异常都会执行

try:
    f=open(a.txt,w)
    print(=====1)
    print(=====2)
    print(=====3)
    d = {x: 1, y: 2}
    # d[‘z‘]  # KeyError
    # xxx
    xx > 10
    print(=====4)
    l = [1, 2, 3]
    # l[1000]  # IndexError
    print(=====5)

except IndexError as e:
    print(IndexError:, e)
except KeyError as e:
    print(KeyError:, e)
# except Exception as e:
#     print(‘Exception:‘,e)
else:
    print(else必须放到后面,else的子代码块会在被检测的代码没有异常的情况下执行)
finally:
    print(无论被检测的代码有没有异常都会执行)
    f.close()
# 主动触发异常
print(===>1)
print(===>2)
raise TypeError(类型错误)
print(===>3)

class People:
    def __init__(self,name,age):
        self.__name=name
        self.__age=age

    def tell_info(self):
        print(self.__name,self.__age)

    def set_info(self,name,age):
        if not isinstance(name,str):
            raise TypeError(名字必须是str类型)
        if not isinstance(age,int):
            raise TypeError(年龄必须是int类型)
        self.__name=name
        self.__age=age

obj=People(egon,18)
# print(obj.__dict__)
# obj.tell_info()

obj.set_info(egon,123)
obj.tell_info()
#自定义异常类型
class MyException(BaseException):
    def __init__(self,msg):
        super().__init__()
        self.msg=msg

    def __str__(self):
        return <%s> %self.msg

raise MyException(我自定义的异常)

 

异常处理

原文:https://www.cnblogs.com/wddxx/p/13675355.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!