【问题描述】l1i100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
请自定义异常类区别月份异常或日期异常。l1i100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
输入数据:l1i100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
2021-13-14l1i100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
输出结果:l1i100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
月份错误l1i100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
【题前思考】l1i100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
根据问题描述,填写表6-3-3。l1i100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
表6-3-3 问题分析l1i100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
l1i100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
【解题思路】l1i100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
自定义两个异常类:MonthError类和DayError类。再定义一个类用来创建日期对象,同时检查传入的数据里的月份和日期是否合法。如果遇到不合法日期,利用raise语句触发异常;如果合法创建日期对象并返回它。最后引入try-except-else块。捕捉抛出的异常,按异常类的不同处理异常。l1i100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
【程序代码】l1i100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
l1i100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
l1i100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
【代码分析】l1i100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
①:导入模块datetime。l1i100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
②:自定义异常类MonthError、DayError。两个类都继承Exception类,魔法方法__str__( )用于以字符串的形式表示异常对象,可以用以下代码输出字符串表示的异常。l1i100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
l1i100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
异常类可以有其他类有的一切属性和方法,用于表示和处理异常,如自定义属性、方法和__init__( )等魔法方法。l1i100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
③:定义类MyDate2。在类中定义静态方法def str2date(sdate):接收字符串,通过字符串切片和类型转换获取年、月、日数据,再根据这些数据创建日期对象,并返回对象。l1i100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
④:用列表dnums表示各月的天数,用dnums[month]表示month月的天数。l1i100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
⑤:检查月份,是否为1~12的整数,不是就用raise语句触发异常MonthError。l1i100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
⑥:闰年的2月比平年的2月多1天。l1i100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
⑦:如果日期超过各月的最大天数则抛出异常DayError。l1i100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
⑧:在try子句中,调用MyDate2类的静态方法str2date('2020-12-31')创建日期对象,如果有异常抛出则捕获。l1i100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
⑨:捕获MonthError或DayError命名为me,并以字符串形式输出异常。如果要在一个except子句中捕获多个异常可以用圆括号将多个异常括起来。l1i100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库