实验八 异常处理

实验八 异常处理

一、实验学时:2学时

二、实验目的

  1. 了解异常基本概念及其常见表现形式
  2. 理解异常出现的各种原因和处理异常的必要性
  3. 掌握常用的异常处理结构

三、实验内容

  1. 编写程序,让用户输入两个整数start和end,然后输出这两个整数之间的一个随机数。要求考虑用户输入不是整数的情况,以及start>end的情况。根据实际情况进行适当提示或输出。
  2. 编写程序,在指定文件路径读方式打开指定文件名,要求如果文件不存在提示异常错误并且创建新的同名文件。

四、实验结果

  1. 编写程序,让用户输入两个整数start和end,然后输出这两个整数之间的一个随机数。要求考虑用户输入不是整数的情况,以及start>end的情况。根据实际情况进行适当提示或输出。

    题目思路:分别重写两个自定义异常类型,第一个用来判断两个数是否是整数,另一个用来判断两个数的大小关系。在try块中利用raise进行异常的抛出即可,except中根据类型进行接受处理。

    程序代码:

    """
    程序名:实验8.1.py
    功能:编写程序,让用户输入两个整数start和end,然后输出这两个整数之间的一个随机数。
    要求考虑用户输入不是整数的情况,以及start>end的情况。根据实际情况进行适当提示或输出。
    日期:2022.6.4
    版本:1.0
    """
    import random
    
    
    # 自定义异常类 MyTypeError ,继承普通异常基类 Exception
    class MyTypeError(Exception):
        def __init__(self, value1, value2):
            self.value1 = value1
            self.value2 = value2
    
        def __str__(self):
            return str(self.value1, self.value2)
    
    
    # 自定义异常类 MyJudgeError ,继承普通异常基类 Exception
    class MyJudgeError(Exception):
        def __init__(self, value1, value2):
            self.value1 = value1
            self.value2 = value2
    
        def __str__(self):
            return str(self.value1, self.value2)
    
    
    try:
        start, end = map(eval, input("请输入两个整数(start & end):").split())  # split以空格分割去接收两个整数
        if not (isinstance(start, int) and isinstance(end, int)):  # 如果不是整数
            raise MyTypeError(start, end)  # 抛出MyTypeError
        if start > end:  # 如果大小不正确
            raise MyJudgeError(start, end)  # 抛出MyJudgeError
        print(f"已生成随机数:{random.randint(start, end)}")
    except MyTypeError as e:
        print(f"MyTypeError:请输入整型数据,您输入的是:{e.value1} {e.value2}")
    except MyJudgeError as e:
        print(f"MyJudgeError:范围不正确!(start)>(end)!")
    

运行结果截图:
图片描述
图片描述
图片描述

  1. 编写程序,在指定文件路径读方式打开指定文件名,要求如果文件不存在提示异常错误并且创建新的同名文件。

    题目思路:利用os.path中的exists来判断文件是否存在,如果存在就打开文件,如果不存在则抛出异常,然后创建新同名文件即可。

    程序代码:

    """
    程序名:实验8.2.py
    功能:编写程序,在指定文件路径读方式打开指定文件名,要求如果文件不存在提示异常错误并且创建新的同名文件。
    日期:2022.6.4
    版本:1.0
    """
    from os.path import exists
    
    try:
        filename = input("请输入文件:")
        if not exists(filename):  # 如果文件不存在
            raise IOError(filename)  # 抛出IOError类型错误
        else:  # 如果存在就打开文件
            with open(filename, 'r') as fp:
                print("打开成功!")
                fp.close()
                print("文件已关闭!")
    except IOError as e:
        print(f"{e}不存在")
        # 文件不存在时创建文件
        with open(str(e), 'w') as fp:
            print(f"{e}创建成功")
            fp.close()
            print(f"{e}已关闭")
    

运行结果截图:
图片描述
图片描述
图片描述
图片描述

五、实验小结

问题和解决办法

  1. 用OSError抛出的异常来创建文件显示:expected str, bytes or os.PathLike object, not OSError

    解决方法:OSError的异常为OSError对象,可以用str()进行转换,然后就可以当做文件名来使用。

  2. 不知道如何实现自定义异常。

    解决方法:通过查询相关知识得知,需要自定义异常类 XXXX ,继承普通异常基类 Exception。

  3. random()生成的都是小数,题目要求为整数。

    解决方法:random.randint(a, b)返回的是(a,b)之间的一个整数。

心得体会

  1. 异常抛出是Python里面的一个非常好用的模块,他可以让我们在写代码的时候,使得错误处理代码变得更有条理,只需在一个地方处理错误。在我们编写的程序中,通过在 try 块中判断用户的输入数据是否合理,如果不合理,程序受 raise 的影响会进行到 except 代码块,对用户的错误输出进行处理,然后会继续执行正常的业务代码;反之,如果用户输入合理,那么程序将直接执行正常的业务代码。这样的话,使用 Python 异常处理机制,可以让程序中的异常处理代码和正常业务代码分离,使得程序代码更加优雅,并可以提高程序的健壮性。
  2. Python学习已经学习到了中后阶段,自我感觉对于Python的认识越来越深入,不仅是对一开始基础知识的应用,到现在的文件处理和异常处理,都是对我们日常生活有很大帮助的模块。
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是一只大狸子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值