Python语言中的异常介绍

了解异常

异常的写法

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

# 示例:尝试以r只读模式打开不存在文件
try:
    open('hello.txt','r')
except:
    print('文件不存在')
文件不存在

捕获异常

简单介绍

  • 如果尝试执行的代码的异常类型与要捕获的异常类型不一致,则无法捕获异常。
  • 一般try下方只放一行尝试执行的代码
'''
语法:
try:
    可能发生错误的代码
except 异常类型:
    如果出现异常执行的代码
'''
try:
    print(num)
except NameError:
    print('变量未定义')


# 异常类型与执行代码的异常类型不一致,则无法捕获异常
# try:
#     print(1/0)
# except NameError:
#     print('变量未定义')
变量未定义

捕获多个异常类型

  • 当要捕获多个异常类型时,放在except后,并使用元组的方式进行书写。
try:
    print(1/0)
    print(num)
except (NameError,ZeroDivisionError):
    print('发现错误啦')
发现错误啦

捕获异常描述信息

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

捕获所有异常

  • Exception是所有异常类的父类
try:
    print(1/0)
except Exception as result:
    print(result)

division by zero

异常的else

  • else表示没有异常要执行的代码
try:
    print(1)
except Exception as result:
    print(result)
else:
    print('我没有错误')
1
我没有错误

异常的finally

  • 无论是否异常,都要执行的代码
try:
    f=open('test.txt','r')
except Exception as result:
    print(result)
    f=open('test.txt','w')
else:
    print('我没有错误')
finally:
    f.close()
    print('已关闭')
[Errno 2] No such file or directory: 'test.txt'
已关闭

异常的传递

# 导入模块
import time
try:
    f = open('test2.txt', 'r')
    try:
        while True:
            result = f.readline()
            if len(result) == 0:
                break
            print(result)
            time.sleep(3)
    except:
        print('中间读取出错啦')
    finally:
        f.close()
        print('读取结束')
except:
    print('文件不存在')
2222

中间读取出错啦
读取结束

自定义异常

  • 抛出自定义异常的语法为raise 异常类对象
# 1.自定义异常类,继承Exception
class ShortInputError(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}个字符。'

# 2.抛出自定义异常
def main():
    try:
        len_input = len(input('请输入自定义密码:'))
        if len_input<3:
            raise ShortInputError(len_input,3)
    except Exception as result:
        print(result)
    else:
        print('输入结束')

# 3.捕获异常
main()
请输入自定义密码:444
输入结束

评论

Your email address will not be published. Required fields are marked *

Scroll Up