我编写的代码从用户那里获取start_date
和end_date
,但是它会抛出错误。
以下是代码:
from datetime import datetime
start_date = datetime.strptime(input('Enter Start date in the format m/d/y'), '%m/%d/%Y')
end_date = datetime.strptime(input('Enter End date in the format m/d/y'), '%m/%d/%Y')
dates=['4/6/2013', '5/4/2013', '6/26/2013', '7/26/2013', '9/5/2013', '10/7/2013', '10/12/2013', '4/12/2014', '5/10/2014', '6/12/2014', '7/19/2014', '8/15/2014', '9/17/2014', '4/21/2015', '5/28/2015', '6/26/2015']
# this line creates a list of datetime objects from the given strings in list dates
dt_dates = [datetime.strptime(date, '%m/%d/%Y') for date in dates]
in_between_dates = []
for d in dt_dates:
if d >= start_date and d <= end_date:
in_between_dates.append(d)
print [d.strftime('%m/%d/%Y') for d in in_between_dates]
并在给出1/1/2014
作为输入后弹出错误如下:
Enter Start date in the format m/d/y1/1/2014
Traceback (most recent call last):
File "C:\Users\Ayush\Desktop\UWW Data Examples\new csvs\temp.py", line 9, in <module>
start_date = datetime.strptime(input('Enter Start date in the format m/d/y'), '%m/%d/%Y')
TypeError: must be string, not int
答案 0 :(得分:3)
由于您使用的是print
语句,因此您似乎使用的是Python 2.x。
在Python 2.x中,input()
实际上会对结果进行求值并返回,因此,如果输入的内容如1/1/2014
或某个数字,则会得到一个整数(在本例中为1)除以1除以2014 - &gt; 0
),而不是字符串。使用input()
通常很危险,因为用户可以输入任何内容并进行评估。
使用raw_input()
来获取字符串,例如 -
start_date = datetime.strptime(raw_input('Enter Start date in the format m/d/y'), '%m/%d/%Y')
end_date = datetime.strptime(raw_input('Enter End date in the format m/d/y'), '%m/%d/%Y')
在Python 3.x中,Python 2中的raw_input()被重命名为input()
,因此在python 3中使用input()
与在Python 2.x中使用raw_input()
相同。 / p>
答案 1 :(得分:0)
对于Python 2,使用raw_input
而不是input
。对于Python 3 input
没问题。