【发布时间】:2017-09-12 18:25:39
【问题描述】:
下面是我的代码。目标是将日期输入转换为虚线格式(例如 01-01-2001)。转换日期后,它应该打印日期。但是,如果日期难以理解或不是有效输入,则应打印“Not a valid date”并返回 None。现在,即使是正确的日期输入,它也只返回 None。转换脚本在之前的任务中使用过并且工作正常,所以我相信问题出在“try/except”块中。
测试输入:
print(date_conversion_robust('19/8/16'))---> 19-08-2016
print(date_conversion_robust('1/12/1898'))---> 01-12-1898
print(date_conversion_robust('16/3/18'))---> 16-03-1918
print(date_conversion_robust('29/2/2017'))---> Not a valid date. None
print(date_conversion_robust('131/2/1928'))---> Not a valid date. None
print(date_conversion_robust(2))---> Not a valid date. None
谢谢!
#Convert date inputs
def convert_day(day_string):
if int(day_string) < 10:
return (day_string).zfill(2)
else:
return day_string
def convert_month(month_string):
if int(month_string) < 10:
return (month_string).zfill(2)
else:
return month_string
def convert_year(year_string):
if int(year_string) < 18:
return('20'+(year_string))
elif int(year_string) < 99:
if int(year_string) >= 18:
return('19'+(year_string))
else:
return year_string
#form date string
def date_conversion(date_string):
date_as_list = date_string.split('/')
a = convert_day(date_as_list[0])
b = convert_month(date_as_list[1])
c = convert_year(date_as_list[2])
try:
L = [a, b, c]
return('-'.join(L))
except(AttributeError, SyntaxError, TypeError):
print('Not a valid date.')
return None
【问题讨论】:
-
你为什么要排除
SyntaxErrors? -
excepts 仅在相应的try块内捕获错误-在您的情况下,这只有两个语句,除非在非常人为的情况下,否则它们都不会失败。如果您的代码确实出现任何问题,则很可能是在调用convert_X函数之一的过程中,这些函数不受保护。 -
找出异常是什么以及正在做什么的最好方法是
raise,而不是像现在这样处理/捕获它。将print('Not a valid date.')替换为raise,您将了解更多关于正在发生的事情 -
请查看How to Ask 并向我们展示您使用的输入以及您获得/期望的输出。您的程序seems to run fine 输入有效。并且要明确:
try/except无法捕获SyntaxErrors -
SyntaxError 不是运行时异常,您无法捕获它!...
标签: python