Странная ошибка памяти в Python

Я извиняюсь за то, что не могу указать проблему дальше, но это потому, что я не понимаю, что здесь происходит не так. Ошибка вызвана строкой 75, но у него есть все значения переменных, которые я вызываю. Я явно что-то упускаю здесь, надеюсь, кто-нибудь может сказать мне, что.

Я пытаюсь добавить строку в переменную для каждой части списка.

<type 'exceptions.MemoryError'> Python 2.6.4: /opt/users/ipg/s/p/ipg.*********/python/python
Sat May 10 19:42:39 2014
A problem occurred in a Python script. Here is the sequence of function calls leading up to the error, in the order they occurred.

       73                                 """ % (description[field_count].value)
       74             for item in upload_field:
       75                 article_content += '<img src="http://www.*****.com/images/%s/%s">' % (link_title, item.filename)
       76             field_count = field_count + 1 
       77     elif isinstance(description, basestring):
___

    article_content undefined, link_title = 'sssfzxs', item = FieldStorage('upload_image1', '857143_7542303279...\x94\x01\xa3\x89\x82\xcc0\xc9n\xea/\x87\xff\xd9'), item.filename = '857143_754230327924155_1256712041_o.jpg'
    <type 'exceptions.MemoryError'>: 
          args = () 
          message = ''

person Solver    schedule 11.05.2014    source источник
comment
Создание строк с помощью оператора += очень неэффективно с точки зрения использования памяти. Предположительно, вы строите такую ​​большую строку, что вам не хватает доступной памяти. Однако здесь недостаточно информации, чтобы сказать больше.   -  person Wooble    schedule 11.05.2014
comment
@Wooble Обычно это добавляет это только 3 раза к пустой строке, поэтому обычно память не должна исчерпаться в ближайшее время.   -  person Solver    schedule 11.05.2014


Ответы (1)


Ошибка MemoryError возникает в случае нехватки памяти, как указано в документах. .

Есть ли шанс, что ваш код зацикливается на неопределенный срок?

Или вы можете фактически достичь предела памяти в 32-разрядной версии Python только из-за объединения слишком большого количества данных, аналогичная ситуация, описанная здесь. В этом случае вы можете оптимизировать конкатенацию или использовать 64-разрядную версию Python.

person famousgarkin    schedule 11.05.2014
comment
Я не думаю, что достигну предела памяти. Объем передаваемых данных очень мал. - person Solver; 11.05.2014
comment
Что ж, в этом процессе память чем-то заполняется. Вы можете добавить некоторые базовые счетчики и протоколирование или попытаться профилировать использование памяти с помощью Heapy для найти виновного. - person famousgarkin; 11.05.2014
comment
Моя петля была бесконечной, и мне потребовалось некоторое время, чтобы понять, почему. - person Solver; 12.05.2014