这个列表理解有什么问题(SyntaxError:语法无效)?

时间:2012-02-18 11:50:36

标签: python list-comprehension

对于什么应该是“没脑子”的LC有问题。

以下代码段:

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 barfs解析函数get_workdays_between_dates()时出现'SyntaxError:无效语法错误'。虽然看起来不错......

代码出了什么问题?

2 个答案:

答案 0 :(得分:6)

x是什么? :)是的,这是一个无效的语法,你错过了for部分。

[x for x in daterange(start_date, end_date) if x.date.weekday() in range(0,7)]

答案 1 :(得分:0)

除语法错误外,该行还有三个问题。鉴于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 ...