• 异常处理


    异常

    在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误

    什么是异常处理?

    python解释器检测到错误,触发异常(也允许程序员自己触发异常)

    程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关)

    如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理

    为什么要进行异常处理?

    python解析器去执行程序,检测到了一个错误时,触发异常,异常触发后且没被处理的情况下,程序就在当前异常处终止,后面的代码不会运行,谁会去用一个运行着突然就崩溃的软件。

    所以你必须提供一种异常处理机制来增强你程序的健壮性与容错性 

    如何进行异常处理?

    首先须知,异常是由程序的错误引起的,语法上的错误跟异常处理无关,必须在程序运行前就修正

    一: 使用if判断式

    num1=input('>>: ') #输入一个字符串试试
    if num1.isdigit():
        int(num1) #我们的正统程序放到了这里,其余的都属于异常处理范畴
    elif num1.isspace():
        print('输入的是空格,就执行我这里的逻辑')
    elif len(num1) == 0:
        print('输入的是空,就执行我这里的逻辑')
    else:
        print('其他情情况,执行我这里的逻辑')
    
    #第二段代码
    # num2=input('>>: ') #输入一个字符串试试
    # int(num2)
    
    #第三段代码
    # num3=input('>>: ') #输入一个字符串试试
    # int(num3)
    
    '''
    问题一:
    使用if的方式我们只为第一段代码加上了异常处理,针对第二段代码,你得重新写一堆if,elif等
    第三段,你还得在写一遍,当然了,你说,可以合在一起啊,没错,你合起来看看,你的代码还能被看懂吗???
    而这些if,跟你的代码逻辑并无关系,这就好比你在你心爱的程序中到处拉屎,拉到最后,谁都不爱看你的烂代码,为啥,因为可读性差,看不懂
    
    问题二:
    第一段代码和第二段代码实际上是同一种异常,都是ValueError,相同的错误按理说只处理一次就可以了,而用if,由于这二者if的条件不同,这只能逼着你重新写一个新的if来处理第二段代码的异常
    第三段也一样

    二:python为每一种异常定制了一个类型,然后提供了一种特定的语法结构用来进行异常处理

    part1:基本语法

    1 try:
    2     被检测的代码块
    3 except 异常类型:
    4     try中一旦检测到异常,就执行这个位置的逻辑

    part2:异常类只能用来处理指定的异常情况,如果非指定异常则无法处理。

    复制代码
    1 # 未捕获到异常,程序直接报错
    2  
    3 s1 = 'hello'
    4 try:
    5     int(s1)
    6 except IndexError as e:
    7     print e
    复制代码

    part3:多分支

    复制代码
    1 s1 = 'hello'
    2 try:
    3     int(s1)
    4 except IndexError as e:
    5     print(e)
    6 except KeyError as e:
    7     print(e)
    8 except ValueError as e:
    9     print(e)
    复制代码

    part4:万能异常 在python的异常中,有一个万能异常:Exception,他可以捕获任意异常,即:

    1 s1 = 'hello'
    2 try:
    3     int(s1)
    4 except Exception as e:
    5     print(e)

    也可以在多分支后来一个Exception

    s1 = 'hello'
    try:
        int(s1)
    except IndexError as e:
        print(e)
    except KeyError as e:
        print(e)
    except ValueError as e:
        print(e)
    except Exception as e:
        print(e)

    复制代码
    s1 = 'hello'
    try:
        int(s1)
    except IndexError as e:
        print(e)
    except KeyError as e:
        print(e)
    except ValueError as e:
        print(e)
    except Exception as e:
        print(e)
    复制代码

    使用try..except的方式

    1:把错误处理和真正的工作分开来
    2:代码更易组织,更清晰,复杂的工作任务更容易实现;
    3:毫无疑问,更安全了,不至于由于一些小的疏忽而使程序意外崩溃了;

  • 相关阅读:
    (转)KMP算法实现。超级赞!见过的最容易理解的
    《越狱》观后感
    【Coursera】Security Introduction -Summary
    【Coursera】Security Introduction -Ninth Week(2)
    【TCP/IP详解 卷一:协议】第十八章 TCP连接 的建立与终止 (2)其余内容
    【Coursera】Security Introduction -Eighth Week(2)
    【TCP/IP详解 卷一:协议】第十八章 TCP连接 的建立与终止 (1)三次握手,四次挥手
    【Coursera】Security Introduction -Eighth Week(1)
    【TCP/IP详解 卷一:协议】第十七章 TCP:传输控制协议
    【Coursera】Seventh Week
  • 原文地址:https://www.cnblogs.com/jiangshitong/p/6797996.html
Copyright © 2020-2023  润新知