如何将具有特定输入的函数传递给验证此输入的函数? - Python

时间:2017-08-10 13:46:59

标签: python python-3.x

我在项目中使用MVCModule-View-Controller)模式。我想保留我的代码DRY(不要重复自己)所以我不想再为另一个输入写get_date函数。

我多次使用函数get_date(),但输入不同。如何将这些输入传递给函数get_date(),以便它可以工作?

我在这里致电get_date()函数:

date = get_date(date_input = provide_date())

这里我想通过输入消息传递函数:

def get_date(date_input):
    ask = True
    while ask:
        date_input
        try:
            validation = datetime.strptime(date_input, '%Y-%m-
%d').strftime('%Y-%m-%d')
            date_list = validation.split('-')
            correct_date = 
date(int(date_list[0]),int(date_list[1]),int(date_list[2]))
            return correct_date
            ask = False
        except ValueError:
            wrong_input()

Provide_date函数是:

def provide_date():
    return input('Type date in format Y-M-D: ')

我有另外的输入用于不同的情况,例如重新安排与另一条消息。

如何将此输入传递给get_date()函数,以便它可以在While循环中工作?因为当我引发TypeError时它会永远循环。

1 个答案:

答案 0 :(得分:1)

您的代码存在一些问题:

  • 调用函数,然后将结果传递给get_date;相反,传递函数本身
  • 然后,调用 get_date内的函数,并将结果绑定到某个变量
  • 无需解析日期,然后对其进行格式化,然后再次手动解析
  • 因为您从函数返回,不需要ask变量

试试这个:

def get_date(date_input):
    while True:
        inpt = date_input()  # add () and bind result to variable
        try:
            dt = datetime.strptime(inpt, '%Y-%m-%d')  # no need to parse-format-parse
            return date(dt.year, dt.month, dt.day)  # use attributes of parsed datetime
        except ValueError:
            wrong_input()

print(get_date(provide_date))  # no () here