Skip to main content
 首页 » 编程设计

python之在 Python 中尝试并排除

2025年05月04日16luoye11

我的代码是:

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

在哪里

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

我也很困惑如何使用 raise 和 try 和 except。 哪个放在代码主体中,哪个放在最后? 例如,在#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 

非常感谢

请您参考如下方法:

你不需要在这里使用 try 和 except。

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 

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)