• 学习python的day15之异常


    异常

    一、异常的写法

    1.异常

    语法:

    try:
        可能发生错误的代码
    except:
        如果出现异常执行的代码

    体验:

    #此时文件不存在
    try:
        f = open('test.txt','r')
    except:
        f = open('test.txt','w')

    2.捕获指定异常

    语法:

    try:
        可能发生错误的代码
    except 异常类型:
        捕获到该异常类型执行的代码

    体验:

    try:
    print(num)
    except NameError:
    print('有错误')

    '''
    输出:
    有错误
    '''

    注意:

      1.如果尝试执行的代码的异常类型和捕获的异常类型不一致,则无法捕获异常

      2.一般try下方只放一行尝试执行的代码

    2.捕获多个指定异常类型

    当捕获多个异常时,可以把要捕获的异常类型的名字,放在except后,并使用元组的方式进行书写。

    try:
        print(num)
    except (NameError,ZeroDivisionError):
        print('有错误')
        
    '''
    输出:
    有错误
    '''

    3.捕获异常描述信息

    try:
        print(num)
    except (NameError,ZeroDivisionError) as result:
        print(result)
    
    '''
    输出:
    name 'num' is not defined
    '''

    4.捕获所有异常

    Exception是所有程序异常类的父类

    try:
        print(num)
    except Exception as result:
        print(result)
    
    '''
    输出:
    name 'num' is not defined
    '''
    
    try:
        print(num)
    except Exception:
        print('有错误')
    
    '''
    输出:
    有错误
    '''

    5.异常的else

    else表示的是如果没有异常要执行的代码

    try:
        print(1)
    except NameError:
        print('有错误')
    else:
        print('没有异常执行')
    
    '''
    输出:
    1
    没有异常执行
    '''

    6.异常的finally

    finally表示无论是否异常都要执行的代码,例如关闭文件。

    try:
        f = open('A.txt','r')
    except:
        f = open('A.txt','w')
    else:
        print('没有异常')
    finally:
        f.close()
    
    '''
    输出:
     
    '''

    7.异常的传递

    体验异常传递

    需求:

      1.尝试只读方式打开test.txt文件,如果文件存在则读取文件内容,文件不存在则提示用户即可.

      2.读取内容要求:尝试循环读取内容,读取过程中如果检测到用户意外终止程序,则except捕获异常,并提示用户

    import time
    try:
        f = open('test.txt','r')
        try:
            while True:
                content = f.readline()
                if len(content) == 0:
                    break
                time.sleep(3)
                print(content)
        except:
            #如果在读取文件的过程中,产生了异常,那么就会捕获到
            #比如  按下了ctrl+c  (该操作在控制台实验)
            print('意外终止程序')
        finally:
            f.close()
            print('关闭文件')
    except:
        print('文件不存在')

    8.自定义异常

    在python中,抛出自定义异常的语法为raise异常类对象

    需求:密码长度不足,则报异常(用户输入密码,如果输入长度不足3位,则报错,即抛出自定义异常,并捕获该异常)

    #自定义异常类,继承Exception
    class PasswordInputError(Exception):
        def __init__(self,length,min_len):
            self.length = length
            self.min_len =min_len
        #设置抛出异常的描述信息
        def __str__(self):
            return f'是输入的密码长度是{self.length},不能少于{self.min_len}个字符'
    
    def main():
        try:
            con = input('请输入密码:')
            if len(con) < 3:
                #抛出异常类创建的对象
                raise PasswordInputError(len(con),3)
        #捕获该异常
        except Exception as result:
            print(result)
        else:
            print('密码输入完成')
    
    main()
    
    '''
    输出:
    请输入密码:12
    是输入的密码长度是2,不能少于3个字符
    
    进程已结束,退出代码 0
    '''

    9.总结

    异常语法:

    try:
        可能发生异常的代码
    except:
        发生异常执行的代码
    else:
        没有异常执行的代码
    finally:
        有没有异常都执行的代码

    捕获异常

    except 异常类型:
        代码
    
    
    except 异常类型 as xx:
        代码

    自定义异常

    #自定义异常类
    class 异常类类名(Exception):
        代码
        
        #设置异常类描述信息
        def __str__(self):
            return ...
    
    #2.抛出异常
    raise 异常类类名()
    
    #3.捕获异常
    except Exception...
  • 相关阅读:
    Which is best in Python: urllib2, PycURL or mechanize?
    Ruby开源项目介绍(1):octopress——像黑客一样写博客
    Truncated incorrect DOUBLE value解决办法
    Qt Quarterly
    Rich Client Platform教程
    iOS6 中如何获得通讯录访问权限
    省赛热身赛之Javabeans
    [置顶] [开心学php100天]第三天:不羁的PHP文件操作
    hdu2033 人见人爱A+B
    [置顶] AAM算法简介
  • 原文地址:https://www.cnblogs.com/scheduled/p/13944241.html
Copyright © 2020-2023  润新知