关键词搜索

源码搜索 ×
×

Python学习:异常处理

发布2019-01-01浏览1203次

详情内容

一、 异常类型

  1. AssertionError:断言语句失败
# AssertionError:断言语句失败,一般是在测试程序时置入检查点
my_list = ['love']
my_list.pop()
assert len(my_list) >0
    Traceback (most recent call last):
      File "<input>", line 1, in <module>
    AssertionError
# AttributeError:尝试访问未知的对象属性,访问不存在时抛出的异常
    1. AttributeError:尝试访问未知的对象属性
    Traceback (most recent call last):
      File "<input>", line 1, in <module>
    AttributeError: 'list' object has no attribute 'dog'
    
    • 1
    • 2
    • 3
    1. IndexError:索引超出序列的范围
    my_list=[1,2,3]
    my_list[3]
    #抛出的异常
        Traceback (most recent call last):
          File "<input>", line 1, in <module>
        IndexError: list index out of range
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. KeyError:字典中查找一个不存在的关键字
    my_dict = {'one':1,'two':2,'three':3}
    my_dict['four']
    #抛出的异常:
        Traceback (most recent call last):
          File "<input>", line 1, in <module>
        KeyError: 'four'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. NameError:尝试访问一个不存在的变量
    # NameError:尝试访问一个不存在的变量时,抛出的异常
        Traceback (most recent call last):
          File "<input>", line 1, in <module>
        NameError: name 'c' is not defined
    
    • 1
    • 2
    • 3
    • 4
    1. OSError:操作系统产生的异常
    # OSError:操作系统产生的异常,也称为FileNotFoundError
        FileNotFoundError: [Errno 2]
    
    • 1
    • 2
    1. SyntaxError:Python的语法错误
    # SyntaxError:Python的语法错误
        SyntaxError: invalidsyntax
    
    • 1
    • 2
    1. ZeroDivisionError:除数为零
    2. TypeError:不同类型间的无效操作
      1+'2'
      #抛出的异常
            TypeError: unsupported operand type(s) for +: 'int' and 'str'
    
    • 1
    • 2
    • 3

    二、异常捕获

    1. try-except语句
    #格式
    try:
        检测范围
    except Exception[as reason]:
        出现异常后的处理代码
    
    • 1
    • 2
    • 3
    • 4
    • 5
    #示例
    try:
        sum1 = 1+ '1'
        f = open('none.txt')
        print(f.read())
        f.close()
    
    except OSError as reason:
        print('文件出错T_T\n出错的原因是:' + str(reason))
    
    # 对多个异常统一处理
    except(OSError,TypeError) :
        print('文件出错T_T')
    
    # 当无法确定对哪一类异常进行处理时,只是希望在try语句里一旦出现任何异常,给用户一个看得懂的提醒
    ...
    except:
        print('出错了')
    ...
    # try语句里一旦出下异常,剩下的语句将不会执行
    
      9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    如果希望在 except 子句中访问异常对象本身,可以使用两个参数(注意:就算要捕捉到多个异常,也只需要向 except 子句提供一个参数-元祖)
    在这里插入图片描述

    1. try-finally 语句
    # 如果try语句中没有出现错误,则语句会跳过except语句块执行finally语句块中的内容,若出现异常,则执行except然后执行finally
    try:
        f = open('不存在的文档')
        print(f.read())
        sum = 1 + '1'
    except:
        print('出错了!T_T')
    # finally 语句块中的内容是无论如何都要执行的
    finally:
        f.close()
    
      9
    • 10

    三、丰富的else语句

    else语句不仅能和if语句搭配,而且也能和for语句或者while语句搭配

    # 求用户输入的数的最大约数,若是素数则提醒用户
    def showMaxFactor(num):
        # 地板除法:两个整数的除法仍然是整数:
        count = num // 2
        while count >1:
            if num % count == 0:
                print('%d 最大的约数是 %d' % (num,count))
                break
            count -=1
        # 如果没有遇到合适的条件,则执行else的语句内容
        else:
            print('%d 是素数!' %num)
    num = int(input('请输入一个数:'))
    showMaxFactor(num)
    
    # else 语句可以与异常搭配使用,如果try语句中没有异常,则执行else中语句
    try:
        a = 1
    except ValueError as reason:
        print('出错了!' + str(reason))
    else:
        print('没有任何异常')
    
      9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    四、简洁的with语句

    # 对文件操作使用with语句,不用担心出现文件打开了忘记关闭的问题(with会自动帮助关闭文件)
    try:
        with open('文本.txt','r',encoding='UTF-8') as f:
            for each_line in f:
                print(each_line)
    except OSError as  reason:
        print("出错了T_T\n出错的原因是:" + str(reason))
    
    

      相关技术文章

      点击QQ咨询
      开通会员
      返回顶部
      ×
      微信扫码支付
      微信扫码支付
      确定支付下载
      请使用微信描二维码支付
      ×

      提示信息

      ×

      选择支付方式

      • 微信支付
      • 支付宝付款
      确定支付下载