在python中使用异常修改程序

在python中使用异常修改程序,python,exception,Python,Exception,我需要制作一个程序,如果作为初始化对象变量的参数传递的日期、月份和年份不代表有效日期,则初始化类对象会引发异常。该异常可能只会发出无效的日期消息 我在Python中没有得到太多的异常,所以我做了一个算法,该算法只有一个if和else来检查它是否有效。如何根据我的需要进行转换,即:如果作为参数传递以初始化对象变量的日期、月份和年份不代表有效日期,则出现异常 def dois(day, month, year): checks = "true" i = 0 while che

我需要制作一个程序,如果作为初始化对象变量的参数传递的日期、月份和年份不代表有效日期,则初始化类对象会引发异常。该异常可能只会发出无效的日期消息

我在Python中没有得到太多的异常,所以我做了一个算法,该算法只有一个if和else来检查它是否有效。如何根据我的需要进行转换,即:如果作为参数传递以初始化对象变量的日期、月份和年份不代表有效日期,则出现异常

def dois(day, month, year):
    checks = "true"
    i = 0
    while checks == "true" and i == 0:
        if (year%4 == 0 and year%100!= 0) or year%400 == 0:
            leap_year = "sim"
        else:
            leap_year = "nao"

        if month < 1 or month > 12:
            checks = "false"

        if day > 31 or ((month == 4 or month == 6 or month == 9 or month == 11) and day > 30):
            checks = "false"

        if (month == 2 and leap_year == "nao" and day > 28) or ( month == 2 and leap_year == "sim" and day > 29):
            checks = "false"
        i = i + 1

    if checks == "true":
        print("Valid date")
    else:
        print("Invalid date")
def dois(日、月、年):
checks=“true”
i=0
而检查==“true”和i==0:
如果(年份%4==0,年份%100!=0)或年份%400==0:
闰年=“sim”
其他:
闰年=“nao”
如果月份<1或月份>12:
checks=“false”
如果天>31或((月==4或月==6或月==9或月==11)天>30):
checks=“false”
如果(月份==2,闰年==“nao”和日期>28)或(月份==2,闰年==“sim”和日期>29):
checks=“false”
i=i+1
如果检查==“true”:
打印(“有效日期”)
其他:
打印(“无效日期”)
我不能使用像time.strtime这样现成的函数,我需要使用我已经实现的功能

实际答案:

# declare a new exception class
class ValidationException(Exception):
    pass

# later
if checks != "true":
    raise ValidationException("Invalid data")
import datetime

try:
    datetime.date(year, month, day)
    print('Valid date')
except ValueError:
    raise ValueError('Invalid date')
try..except..raise
实际上只是为了满足“异常可能只发出无效的日期消息”(不管确切的意思是什么)的条件。实际上,您只需按原样使用
date
引发的
ValueError
。我不知道这个练习的意义是什么,是转换异常还是重新创建日期解析是我的想法。

实际答案:

import datetime

try:
    datetime.date(year, month, day)
    print('Valid date')
except ValueError:
    raise ValueError('Invalid date')

try..except..raise
实际上只是为了满足“异常可能只发出无效的日期消息”(不管确切的意思是什么)的条件。实际上,您只需按原样使用
date
引发的
ValueError
。我不知道这个练习有什么意义,是转换异常还是重新创建日期解析是个好主意。

这需要多大的学术性…?在实践中,您会执行
datetime.datetime(年、月、日)
,并让它引发一个异常。为什么
呢?!不管怎样,它只做过一次迭代。这需要多大的学术性…?在实践中,您会执行
datetime.datetime(年、月、日)
,并让它引发一个异常。为什么
呢?!无论如何,它只做了一次迭代。