【问题标题】:ValueError at / time data '' does not match format '%Y-%m-%d'ValueError at / time data '' 与格式 '%Y-%m-%d' 不匹配
【发布时间】:2021-12-23 23:22:27
【问题描述】:

我正在做一个项目,当用户提到特定的日期范围时,会打印相应的数据。当提到特定日期时,该页面通过输入类型日期从用户那里获取输入,日期的值传递给user_input_date_touser_input_date_to。但是当我执行时,我收到了错误 ValueError at / time data '' does not match format '%Y-%m-%d'

我的观点文件

def indexview(request):
    url=requests.get('https://data.covid19india.org/v4/min/timeseries.min.json')
    json_data=url.json()

    user_input_state=''
    user_input_date_from=''
    user_input_date_to=''
    user_data_type=''
    user_required_type=''
    if request.method == 'POST':
        user_input_state=request.POST.get('state')
        x=request.POST['date_from']
        user_input_date_to=request.POST['date_to']
        user_data_type=request.POST.get('data_period')
        user_required_type=request.POST.get('required_type')
        #To store dates list
    start_date =user_input_date_from
    end_date = user_input_date_to
    start_date_object = dt.datetime.strptime(start_date,"%Y-%m-%d").date()
    end_date_object = dt.datetime.strptime(end_date,"%Y-%m-%d").date()
    days = end_date_object - start_date_object
    dates=[]
    otp=[]
    for i in range(days.days+1):
        dates.append(str(start_date_object+dt.timedelta(days=i)))
    
    for i in dates:
        try:
            otp.append(json_data[user_input_state]['dates'][i][user_data_type][user_required_type])
        except KeyError:
            otp.append(0)
    
    dict_pass={
        'dates':dates,
        'otp':otp
        }
    return render(request,'index.html',dict_pass)

HTML 日期表单

 <input type="date" name="date_from"><br>  
 <input type="date" name="date_to">  

【问题讨论】:

  • 您似乎将一个空字符串传递给datetime.strptime。您确定在 JSON 中定义了日期/时间吗?
  • 函数 user_input_date_fromuser_input_date_to 分别分配给 start_dateend_date 但未在给定代码中调用(即,最后缺少 ())。请更改此设置,看看是否可以解决问题。
  • @MrFuppes @unityJarvis 当我通过 ``` user_input_date_from 或 user_input_date_to='2021-11-10' (一些随机日期)``` 并且如果我评论 ``` user_input_date_to=request.POST[ 'date_to'] user_data_type=request.POST.get('data_period') ``` 那么代码正在运行,但无法找出问题所在
  • 您可以提供整个错误跟踪,尤其是包含错误的行

标签: python json django api datetime


【解决方案1】:

问题是,您正试图从无效的用户输入(在您的情况下为空字符串)创建格式为 '%Y-%m-%d'datetime 对象。

您应该首先验证用户输入,然后执行业务逻辑。

您可以手动完成,或尝试使用现有库进行验证 (例如pydanticmarshmallow ...)

【讨论】:

  • 当我打印 user_input_from 值时无法弄清楚如何验证我得到了格式 YYYY-MM-DD(例如:2021-101-11),这是我想要的形式,如果我评论了 user_input_date_to =request.POST['date_to'] 并且刚开始声明 user_input_date_from 或 user_input_date_to='2021-11-11 我得到了我的输出。
  • 如果 request.method 不等于 'POST': 则传递给 strptime 函数的初始值存储在空字符串 user_input_date_from
猜你喜欢
  • 2022-01-20
  • 2016-10-15
  • 1970-01-01
  • 2018-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-04
相关资源
最近更新 更多