2012-02-18 69 views
2

有什麼問題應該是一個「沒有腦子」的LC。這個列表理解有什麼問題(SyntaxError:無效的語法)?

代碼下面片段:

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時()。它看起來對我來說雖然...

代碼有什麼問題?

回答

3

什麼是x? :)是的,這是一個無效的語法,你錯過了for部分。

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

嘎!現在走開去站在角落裏。所以我感到羞愧:) – 2012-02-18 11:54:47

+4

選擇一個陽光明媚的角落與雞尾酒雨傘 – 2012-02-18 12:04:03

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 ...