学习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...

 

posted @ 2020-11-08 14:13  as_scheduled  阅读(90)  评论(0编辑  收藏  举报