zoukankan      html  css  js  c++  java
  • python-异常

     

     除零异常   ZeroDivisionError  

    名称异常    NameError  

    类型异常    TypeError

    索引异常    IndexError

    键异常       KeyError 

    值异常      ValueError

    属性异常   AttributeError

    迭代器异常   StopIteration 

    错误信息的获取:

    错误信息中最后一行的第一个单词

    异常处理方案一

    捕获所有错误:

    try:

        num=int(input('请输入整数:'))  #容易出错的代码

    except:

        print('你输入错误')         #出错后,进行处理的代码

    根据错误类型进行捕获:

    try:

        num=int(input('请输入整数:'))  #容易出错的代码

        num = 8/num

    except ValueError :

        print('请输入正确的整数')         #出错后,进行处理的代码

    except ZeroDivisionError :

        print('除0错误')

    说明:except后面是错误信息,可以有多个

    多种异常一起处理:

    try:
        #s=1/0
        print(name)
    except (ZeroDivisionError,NameError):  #同时捕获不同异常
        print('除0异常或名称异常')

    捕获未知错误:

    try:

        num=int(input('请输入整数:'))  #容易出错的代码

        num = 8/num

    except ValueError :

        print('请输入正确的整数')         #出错后,进行处理的代码

    except Exception as cuowuxinxi:

    print('错误信息:%s'%cuowuxinxi)

    说明:cuowuxinxi保存返回的错误信息,这个错误信息和错误类型不一样

    这个应该在所有预测到的错误类型之后

    异常捕获的完整语法:

    finally与return相遇时,先执行finally再return

    异常处理方案二

    with open('1.png','r') as f:#会自动执行__enter__方法,把返回的文件对象赋值给f
        #不管下面的代码是否出现异常,都会执行__exit__即自动退出文件
        f.readline()

    自定义上下文管理器:

    
    
    class Test:
    def __enter__(self):
    print('enter')
    return self
    def __exit__(self, exc_type, exc_val, exc_tb):
    print('exit:')
    print(self, exc_type, exc_val, exc_tb)

    with Test() as x:
    print('body',x)
     

    执行以上代码时的结果是:

    enter    --->先执行预处理函数__enter__ 
    body <__main__.Test object at 0x0000009D1DDAD518>  --->执行代码,x是__enter__函数的返回值
    exit:     --->最后执行退出函数
    <__main__.Test object at 0x000000DE4971D518> None None None

    
    
    class Test:
    def __enter__(self):
    print('enter')
    return self
    def __exit__(self, exc_type, exc_val, exc_tb):
    print('exit:')
    print(exc_type, ',',exc_val,',', exc_tb)
    return True #返回True不会再抛出异常信息

    with Test() as x:
    print('body')
    1/0 #产生异常,把异常信息传给__exit__函数
     

    显示结果:

    exc_type--->异常类型
    exc_val--->异常值
    exc_tb--->追踪信息
    
    
    class Test:
        def __enter__(self):
            print('enter')
            return self
        def __exit__(self, exc_type, exc_val, exc_tb):
            print('exit:')
            print(exc_type, ',',exc_val,',', exc_tb)
            import traceback
            print(traceback.extract_tb(exc_tb)) #打印追踪信息
            #[<FrameSummary file D:/ss/ssss/test1.py, line 15 in <module>>]
            return True
    
    with Test() as x:
        print('body')
        1/0

    人为抛出异常raise:

    def a(age):
        if age<0 or age>120:
            #print('年龄值错误')
            raise ValueError('年龄值错误')
            #ValueError  是异常类型
            #参数  提示信息。except ValueError as x,这个参数会赋值给x
        else:
            print('张三的年龄是',age)
    
    a(-18)

     自定义异常类型:

     

    class lesszero(Exception):#自定义异常类,继承与Exception
        def __init__(self,msg):
            self.msg=msg
        def __str__(self):
            return self.msg
    def a(age):
        if age<0 or age>120:
            raise lesszero('年龄值错误')  #抛出自定义异常类-执行异常类
            #参数传给msg
        else:
            print('张三的年龄是',age)
    
    try:
        a(-18)
    except lesszero as x:  #x就是__str__返回的值
        print('异常被处理',x)  #异常被处理 年龄值错误

    天子骄龙

  • 相关阅读:
    go函数
    Linux 查看磁盘容量、查找大文件、查找大目录
    五分钟理解一致性哈希算法(consistent hashing)
    使用Java实现三个线程交替打印0-74
    Python实现IOC控制反转
    Wannafly挑战赛5 A珂朵莉与宇宙 前缀和+枚举平方数
    Yandex Big Data Essentials Week1 Scaling Distributed File System
    Yandex Big Data Essentials Week1 Unix Command Line Interface Processes managing
    Yandex Big Data Essentials Week1 Unix Command Line Interface File Content exploration
    Yandex Big Data Essentials Week1 Unix Command Line Interface File System exploration
  • 原文地址:https://www.cnblogs.com/liming19680104/p/10855833.html
Copyright © 2011-2022 走看看