Что не так с этим пониманием списка (SyntaxError: неверный синтаксис)? - PullRequest
4 голосов
/ 18 февраля 2012

Возникли проблемы с тем, что должно быть "ежу понятно".

Фрагмент кода ниже:

def daterange(start_date, end_date):
    for n in range((end_date - start_date).days):
        yield start_date + dt.timedelta(n)


def get_workdays_between_dates(start_date, end_date):
    return [x in daterange(start_date, end_date) if x.date.weekday() in range(0,7)]

Python исключает 'SyntaxError: недопустимая синтаксическая ошибка' при разборе функции get_workdays_between_dates (). Это выглядит нормально для меня, хотя ...

Что не так с кодом?

Ответы [ 2 ]

6 голосов
/ 18 февраля 2012

Что такое x? :) Да, это неверный синтаксис, вам не хватает части for.

[x for x in daterange(start_date, end_date) if x.date.weekday() in range(0,7)]
0 голосов
/ 19 февраля 2012

Помимо синтаксической ошибки, у вас есть еще три проблемы в этой строке.Учитывая, что x ссылается на объект datetime:

Проблема 1: x.date это метод, а не атрибут

>>> import datetime
>>> x = datetime.datetime.now()
>>> x
datetime.datetime(2012, 2, 19, 9, 23, 53, 136000)
>>> x.date.weekday()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'builtin_function_or_method' object has no attribute 'weekday'
>>> x.date()
datetime.date(2012, 2, 19)
>>> x.date().weekday()
6

Проблема 2: .dateизбыточный

>>> x.weekday()
6

Проблема 3: Мне кажется, что x.weekday() in range(0,7) всегда будет True.Возможно, вы имеете в виду:

# initialisation
NON_WEEKEND_DAYS = set(range(0, 5))

# as needed
... x.weekday() in NON_WEEKEND_DAYS ...
...