2015-07-13 3 views
-1

Я написал код, который принимает 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

Не могли бы вы уменьшить пример, чтобы [сделать его как можно меньше] (http://stackoverflow.com/help/mcve)? –

ответ

3

Поскольку вы используете оператор print, похоже, что вы используете Python 2.x.

В Python 2.x, input() на самом деле оценивает результат и возвращает, поэтому, если вы вводите что-то вроде 1/1/2014 или некоторое число, вы получите целое число (которое в этом случае равно 1 делится на 1, деленное на 2014 год - >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, raw_input() из Python 2 был переименован в input(), поэтому использование input() в Python 3 такое же, как с помощью raw_input() в Python 2.x.

0

Для Python 2 использования raw_input вместо input. Для Python 3 input в порядке.

Смежные вопросы