2012-01-29 2 views
0

здесь небольшой коддля петель для строки, содержащей DateTime() объекты

ds = datetime.datetime.now() 
de = ds + datetime.timedelta(days=99) 
fd = list(rrule(DAILY, byweekday=(SA,SU), dtstart=ds, until=de)) 
for x in fd: 
    print fd[x-1] 

он должен дать мне список даты-времени() объектов. но это не так. вот метод ошибки i получил

Traceback (most recent call last): 
    File "<pyshell#23>", line 1, in <module> 
    int(fd[0]) 
TypeError: int() argument must be a string or a number, not 'datetime.datetime' 

что может быть неправильным?

+2

Что такое 'rrule'? – Amber

+1

@Amber: Мне пришлось искать его, похоже, что это часть ['python-dateutil'] (http://labix.org/python-dateutil#head-470fa22b2db72000d7abe698a5783a46b0731b57). – Johnsyweb

ответ

2

Вы не можете вычесть int1 из datetime.datetime объекта.

x является товаром из list из datetime.datetime объектов под названием fd, а не индекса.

Где у вас есть:

for x in fd: 
    print fd[x-1] 

Вы хотите:

for x in fd: 
    print x 

Это даст вам список с. 29 пунктов (в зависимости от того, когда вы запускаете его, естественно):

2012-01-29 19:47:23 
2012-02-04 19:47:23 
2012-02-05 19:47:23 
2012-02-11 19:47:23 
2012-02-12 19:47:23 
[...] 
2012-04-22 19:47:23 
2012-04-28 19:47:23 
2012-04-29 19:47:23 
2012-05-05 19:47:23 
2012-05-06 19:47:23 
+0

спасибо, это было полезно. но я решил свою проблему по-другому. вот что я сделал. 'для x в диапазоне (0, len (fd (x)):' .. 'print fd (x)' .. и он дал мне то, что я хотел. спасибо за помощь. – debuggerpk

+0

@mouse: 'for x in range (0, len (fd)): 'не является Pythonic. И' print fd (x) 'недействителен. Что случилось с тем, что я вложил в мой ответ? – Johnsyweb

+0

извините .. это было fd [x]. неправильное решение. Мне нужно, чтобы x было целым числом, потому что я имел дело с несколькими массивами. – debuggerpk

1

fd - это список datetime объектов. for x in fd дает вам все объекты в fd, а не индекс в fd. Похоже, что вам нужно сделать одно из следующих действий:

for x in fd: 
    print x # not fd[x - 1] 

Или

for x in range(len(fd)): 
    print fd[x] 
1
  • fd список datetime объектов.
  • fd[0] является объектом datetime.
  • int(fd[0]) поднимает

    TypeError: int() argument must be a string or a number, not 'datetime.datetime' 
    

    , так как вы не можете применить int к объекту даты и времени; как говорит ошибка, int преобразует str или ints только ints

  • fd[x] поднимает

    TypeError: list indices must be integers, not datetime.datetime 
    

    так x сам по себе является datetime объект, и не является допустимым индексом для перечень fd.

  • fd[x-1] поднимает

    TypeError: unsupported operand type(s) for -: 'datetime.datetime' and 'int' 
    

    поскольку x является объектом даты и времени, и вы не можете вычесть Int из объекта даты и времени.

Если вы опишете, что именно вы пытаетесь напечатать, мы сможем предложить, какой код производит его.

+0

вот что я сделал для решения своей проблемы 'for x in range (0, len (fd):' .. я пытался распечатать список дат, которые выпадают на субботу и воскресенье между этими конкретными датами. – debuggerpk

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