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

    九、异常处理

     

    需求:当程序遇到问题不让程序结束,而越过错误继续向下执行

    try……except……else
    格式:
    try:
        语句t
    except 错误码 as e:
        语句1
    except 错误码 as e:
        语句2
        ……
        ……
    else:
        语句f
    注意:else语句可有可无
    
    作用:用来检测try语句块中的错误,从而让except语句捕获错误信息并处理
    逻辑:
    1、如果try:“语句t”执行出现错误,会匹配第一个错误码,如果
    匹配上就执行对应“语句”
    2、如果当try“语句t”执行没有错误,没有匹配的异常,错误将会
    匹配上一层的try“语句”,或者到程序的最上层
    3、如果当try"语句t"执行没有出现错误,执行else下的“语句”(你得有)
    
    try:
        print(3 / 0)
    except ZeroDivisionError as e:
        print("除数为0了")
    else:
        print("*")
    print("*****")
    
    
    try:
        print(4 / 0)
        print(nums)
    except:
        print("程序出现异常")
    
    #使用except带着多种异常
    try:
        pass
        print(4 / 0)
        print(nums)
    except(ZeroDivisionError, NameError ):
        print("出现了NameError,ZeroDivisionError")
    
    特殊
    1、错误其实是class(类),所有的错误都是继承自BaseException,所以在捕获的时候,他捕获了该类型的错误,还把子类一网打尽
    try:
        print(5 / 0)
    except BaseException as e:
        print("异常1")
    except ZeroDivisionError as e:
        print("异常2")
    
    #2、跨越多层调用,main()调用了func1
    def func1(num):
        print(1 / num)
    def func2(num):
        func1(num)
    def main():
        func2(0)
    try:
        main()
    except ZeroDivisionError as e:
        print("******")
    
    try ……except……finally
    格式:
    try:
        语句t
    except 错误码 as e:
        语句1
    except 错误码 as e:
        语句2
        ……
        ……
    finally:
        语句f
    
    作用:语句t无论是否有错误都执行最后的语句f
    try:
        print(1/0)
    except ZeroDivisionError as e:
        print("******")
    finally:
        print("必须执行我")
    
    # 断言
    def func(num, div):
        assert (div != 0),"""div不能为0"""
        return num / div
    print(func(10, 0))

     9-1  捕获异常

    # 捕获简单异常
    
    try:
        print("-"*20)
        first_number = input("输入第一个数:")
        second_number = input("输入第二个数:")
        print(int(first_number) / int(second_number))
        print("-"*20)
    except ZeroDivisionError:
        print("第二个数不能为0")

    9-2  捕获多个异常

    # 捕获简单异常
    
    try:
        print("-"*20)
        first_number = input("输入第一个数:")
        second_number = input("输入第二个数:")
        print(int(first_number) / int(second_number))
        print("-"*20)
        
    except ZeroDivisionError:
        print("第二个数不能为0")
    
    except ValueError:
        print("只能输入数字")
    
        
    try:
        print("-"*20)
        first_number = input("输入第一个数:")
        second_number = input("输入第二个数:")
        print(int(first_number) / int(second_number))
        print("-"*20)
    
    #   捕获多个异常,用同一种处理方法
    except (ZeroDivisionError, ValueError):
        print("第二个数不能为0")
        print("只能输入数字")
    
    
    
        

    9-3  捕获异常的描述信息

    try:
        print("-"*20)
        first_number = input("输入第一个数:")
        second_number = input("输入第二个数:")
        print(int(first_number) / int(second_number))
        print("-"*20)
    
    #   捕获异常的描述信息
    except (ZeroDivisionError, ValueError) as result:
        print("捕获到异常:%s"%(result))
    
        

    9-4  捕获所有异常

    try:
        print("-"*20)
        first_number = input("输入第一个数:")
        second_number = input("输入第二个数:")
        print(int(first_number) / int(second_number))
        print("-"*20)
    
    #   捕获到所有异常,都执行同样的处理
    except :
        print("捕获到异常")
    
        
    try:
        print("-"*20)
        first_number = input("输入第一个数:")
        second_number = input("输入第二个数:")
        print(int(first_number) / int(second_number))
        print("-"*20)
    
    #   捕获到所有异常,输出异常类型
    except Exception as result:
        print("捕获到异常:%s"%(result))
    
        

    9-7  没有捕获到异常,执行else语句

    try:
        print("-"*20)
        first_number = input("输入第一个数:")
        second_number = input("输入第二个数:")
        print(int(first_number) / int(second_number))
        print("-"*20)
    
    #   捕获到所有异常,输出异常类型
    except Exception as result:
        print("捕获到异常:%s"%(result))
    
    #   没有捕获到异常时,执行else语句
    else:
        print("程序正常运行,没有捕获到异常。")
    
        

    9-8  终止行为:无论有没有异常都要执行的语句

    import time
    try:
        file = open("test.txt", "w+")
        while True:
            content = file.read()
            if len(content) == 0:
                break;
            time.sleep()
            print(content)
            
    #   始终要执行的语句
    finally:
        file.close()
        print("关闭文件")

    9-10  自定义异常

    class ShortInputException(Exception):
        #   自定义异常类
        def __init__(self, length, atleast):
            self.length = length  # 输入长度
            self.atleast = atleast  # 至少长度
    try:
        text = input("输入密码:")
        if len(text) < 3:
            # raise 引发一个刚刚定义的异常
            raise ShortInputException(len(text), 3)
    except EOFError:
        print("您输入了一个结束标识符")
    except ShortInputException as result:
        print("ShortInputException:输入的长度是%d,长度至少是%d"
              %(result.lenth, result.atleast))
    else:
        print("没有异常发生。")
  • 相关阅读:
    脊椎有问题的7个信号
    SOHO兼职 SOHO一族 世界创业实验室
    MSTParser句法工具使用方法
    BinaryFormatter序列化实例
    C#中文件流,网络流,缓冲流等流的概念理解
    探讨和比较Java和_NET的序列化_Serialization_框架
    .net中对象序列化技术浅谈
    史上最详细最容易理解的HMM文章
    成功者足迹的综合总结:网络创业14条不外传的绝招
    此情何时休
  • 原文地址:https://www.cnblogs.com/xieyi-newlife/p/8923996.html
Copyright © 2011-2022 走看看