2017-12-06 9 views
0

オブジェクト変数を初期化するための引数として渡された日、月、および年が有効な日付を表していない場合、クラスオブジェクトを初期化するプログラムを作成する必要があります。例外は無効な日付メッセージのみを発行することがあります。Pythonで例外を使用してプログラムを変更する

私はPythonではあまり例外がありませんので、有効かどうかを調べるifとelseだけを持つアルゴリズムを実行しました。私が必要とするもの、つまり:オブジェクト変数を初期化するための引数として渡された日、月、年が有効な日付ではない場合、例外をどのように変換するか?私はtime.strptimeのような既製の機能を使用することはできません

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") 

、私は

+2

これは学業者がどのようにする必要がありますか?実際には 'datetime.datetime(year、month、day)'を実行し、例外を発生させます。 – deceze

+1

なぜ「while」?!とにかくこれを繰り返しているのは1つだけです。 – deceze

答えて

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

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

実用的な答え実装したものを使用する必要があります。

import datetime 

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

try..except..raiseが本当にあるの"例外は無効な日付メッセージのみを発行することがあります"という条件を満たすためには(正確には何でも)です。実際には、dateで提出されたValueErrorをそのまま使用します。例外を変換するか、日付解析を再作成するかにかかわらず、この演習が何であるかはわかりません。

関連する問題