【问题标题】:Try-Except: sre_constants.errorTry-Except: sre_constants.error
【发布时间】:2015-11-05 11:14:32
【问题描述】:

我必须验证从文件中导入的一些日期,这些日期有不同的格式。例如 %Y/%m/%d 和 %d/%m/%Y。问题是我必须重新格式化它们才能将它们分开等。

我发现我需要使用 Try/Except,但是当我使用以下代码时(其中 dates[1] 是所有日期):

更新:

我正在尝试使用不同的代码来使用 strptime 和 strftime 更改错误的格式。但是,我不知道它是否是在除法中使用 strptime/strftime 的好方法?除了仅用于打印等吗?

代码:

for dates in data_from_file:
  dates = (dates[1])
  print(dates)
  try:
    validate_format = datetime.datetime.strptime(dates, '%d/%m/%Y')
  except ValueError:
    datetime.datetime.strptime(dates, '%Y/%m/%d').strftime('%d/%m/%Y')
  except ValueError:
    datetime.datetime.strptime(dates, '%d. %B %Y').strftime('%d/%m/%Y')

第一个 ValueError 除外,因为我看到 time data *format* does not match '%d/%m/%Y' 错误的格式发生了变化。有三种不同的格式,所以我也必须更改最后一种。但它似乎记得除了 ValueError 之外的第一个格式?

现在它说:ValueError: time data '%d. %B %Y' (in numbers, ofc) does not match format '%Y/%m/%d'

【问题讨论】:

  • 是什么让您相信您可以通过这种方式传递格式?
  • 重构为for 循环date_formats,看看情况如何。
  • 更新代码,请看一下。

标签: python-3.x strptime try-except


【解决方案1】:

完成的结果:

for line in data_file:
 line = (line.decode('utf-8').strip())
 if line.startswith('#'):
  pass
 else:
  names, birthdates, residences, genders = line.split('#')
  try:
   datetime.strptime(birthdates, '%d/%m/%Y')
  except:
   try:
     bad_format = birthdates
     birthdates = datetime.strptime(bad_format, '%Y/%m/%d').strftime('%d/%m/%Y')
   except ValueError:
     bad_format_letters = birthdates
     if bad_format_letters in bad_format_letters:
       birthdates = datetime.strptime(bad_format_letters, '%d. %B %Y').strftime('%d/%m/%Y')
  nameslist.append(names)
  birthdateslist.append(birthdates)
  residenceslist.append(residences)
  genderslist.append(genders)

【讨论】:

    猜你喜欢
    • 2019-06-26
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 2018-03-19
    • 2011-04-25
    • 2011-09-29
    • 2019-09-28
    • 1970-01-01
    相关资源
    最近更新 更多