zoukankan      html  css  js  c++  java
  • 异常处理

    1 什么是异常处理:

       异常是错误发生的信号,一旦程序出错就会产生一个异常,如果该异常

        没有被应用程序处理,那么该异常就会抛出来,程序的执行也随之终止

        异常包含三个部分:

            1. traceback异常的追踪信息

            2. 异常的类型

            3. 异常的信息

        错误分为两大类:

            1. 语法上的错误:在程序运行前就应该立即修正

            2. 逻辑上的错误

    2. 为何要异常处理

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

    3.如何异常处理

    try:
        代码1
        代码2
        代码3
        ......
    except NameError:
        当抛出的异常是NameError时执行的子代码块
    except ....:
        pass
    except ...:
        pass
    else:
        pass
    finally:
        pass
    print('adsfsadf')
    
    age=input('>>: ').strip()
    print(age > 10) #TypeError
    
    for i in 10: #TypeError
        pass
    
    import os
    os.xxx #AttributeError
    
    1 / 0 #ZeroDivisionError:
    
    print('=====1')
    print('=====2')
    print('=====3')
    l=[1,2,3]
    l[1000] #IndexError
    print('=====4')
    d={'x':1,'y':2}
    d['z'] #KeyError
    print('=====5')
    View Code常见的逻辑错误导致的异常
    try:
        print('=====1')
        print('=====2')
        print('=====3')
        d = {'x': 1, 'y': 2}
        d['z']  # KeyError
        print('=====4')
        l = [1, 2, 3]
        l[1000]  # IndexError
        print('=====5')
    except IndexError:
        print('IndexError')
    
    print('other code')
    View Code异常处理的单分支
    try:
        print('=====1')
        print('=====2')
        print('=====3')
        d = {'x': 1, 'y': 2}
        d['z']  # KeyError
        print('=====4')
        l = [1, 2, 3]
        l[1000]  # IndexError
        print('=====5')
    except KeyError as e:
        print('KeyError',e)
    except IndexError as e:
        print('IndexError',e)
    
    
    print('other code')
    View Code异常处理的多分支
    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)
    
    print('other code')
    View Code万能异常类型Exception:可以匹配任意类型的异常
    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')
    View Codetry... else...
    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()
    View Codetry... finally...
    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()
    View Code 主动触发异常
    # 自定义异常类型(了解)
    class MyException(BaseException):
        def __init__(self,msg):
            super().__init__()
            self.msg=msg
    
        def __str__(self):
            return '<%s>' %self.msg
    
    raise MyException('我自定义的异常')
    
    
    
    # 断言(了解)
    print('上半部分,生产数据')
    l=[1,2,3,4]
    
    # if len(l) != 5:
    #     raise TypeError('列表的长度必须为5')
    assert len(l) == 5
    
    print('下半部分,处理数据')
  • 相关阅读:
    (原创)C++ IOC框架
    【教训】为什么不作备份?!
    【教训】php pcntl_fork无法在web服务器环境下使用
    PHP多进程处理并行处理任务实例
    mysql数据库授权
    PHPUnit学习03使用Mock对象解决测试依赖
    [Inside] How to solve one problem?
    [Inside] What’s the assumptions you are making
    算法面试题解答(六)
    [Inside] System Thinking
  • 原文地址:https://www.cnblogs.com/xuecaichang/p/9544253.html
Copyright © 2011-2022 走看看