我的代码是:
def less_than_equal(start_day, start_mon, start_year, \
end_day, end_mon, end_year):
try:
start_day <= end_day and start_mon <= end_mon
return True
except:
start_day > end_day or start_mon > end_mon or start_year >end_year
print("Start date must be less than or equal end date.")
Run Code Online (Sandbox Code Playgroud)
哪里
>>> less_than_equal(12, 4, 1111, 12, 5, 1111)
True
>>> less_than_equal(12, 7, 1111, 12, 5, 1111)
"Start date must be less than or equal end date." (but my code gives True)
>>> less_than_equal(17, 7, 1111, 12, 5, 1111)
"Start date must be less than or equal end date." (mine gives True here too)
Run Code Online (Sandbox Code Playgroud)
我也很困惑如何使用加注和尝试除外.哪个放在代码的正文中,哪个放在最后?例如,在#TODO下
def count_days(start_date, end_date):
# date is represented as a string in format dd/mm/yyyy
start_day, start_mon, start_year = get_day_month_year(start_date)
end_day, end_mon, end_year = get_day_month_year(end_date)
# TODO: check for data validity here #
# if start date is not valid...
# if end date is not valid...
# if start date > end date...
if is_valid( start_day, start_mon, start_year) == False:
raise ValueError( "Not a valid date: " + start_date )
elif is_valid(end_day, end_mon, end_year) == False:
raise ValueError( "Not a valid date: " + end_date )
if less_than_equal(start_day, start_mon, start_year, \
end_day, end_mon, end_year) == "Start date must be less than or equal end date.":
raise ValueError( "Not a valid date: " + start_date )
# lazy - let the computer count from start date to end date
count = 0
while less_than_equal(start_day, start_mon, start_year, end_day, end_mon, end_year):
count = count + 1
start_day, start_mon, start_year = next_date(start_day, start_mon, start_year)
# exclude end date
return count - 1
Run Code Online (Sandbox Code Playgroud)
非常感谢
除了这里,您不需要使用try.
def less_than_equal(start_day, start_mon, start_year, \
end_day, end_mon, end_year):
if start_day <= end_day and start_mon <= end_mon:
return True
elif start_day > end_day or start_mon > end_mon or start_year >end_year:
print("Start date must be less than or equal end date.")
return False
Run Code Online (Sandbox Code Playgroud)
Try和except用于捕获异常.
对于你的第二个问题,你可以
count = 0
while True:
try:
if not less_than_equal(start_day, start_mon, start_year, end_day, end_mon, end_year):
break
except TypeError: # for example
break
count = count + 1
start_day, start_mon, start_year = next_date(start_day, start_mon, start_year)
Run Code Online (Sandbox Code Playgroud)