Вы говорите
i = "\n" + level*" "
TypeError: object cannot be interpreted as an index
но в этом утверждении нет ничего, что было бы даже смутно похоже на операцию с индексом. Предложение: не меняя код другим способом, введите
print repr(elem), repr(level)
перед приведенным выше утверждением и отредактируйте свой вопрос, чтобы показать результат. Также добавьте, какая версия Python, и покажите, как вы импортировали ElementTree (или cElementTree).
Похоже, вы скопировали / вставили подпрограмму из ElementLib эффбота ... Она выглядит хорошо, кроме запутанного, но не смертельного for elem in elem
.
Одной из основных проблем является то, что по какой-то странной причине вы сделали его методом вашего класса вместо отдельной функции. Либо (1) перетащите его из своего класса и назовите его как
indent(root)
или (2) измените его определение на
def indent(self, elem, level=0)
и посмотрите, исчезнет ли проблема.
Обновление Проблема исчезнет:
[Python 2.6.6]
>>> import xml.etree.ElementTree as et
>>> et.Element('atag') * " "
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: object cannot be interpreted as an index
Приведенное выше загадочное сообщение об ошибке должно быть ошибкой; Python 2.7.1 производит гораздо более разумный
TypeError: can't multiply sequence by non-int of type 'Element'
из того же кода.