Вы, кажется, не делаете ничего плохого. Кажется, это простая ошибка в библиотеке gTTS
. Ниже приведен код ошибки : код предназначен только для целей отладки.
# Debug
for k, v in locals().items():
if k == 'self':
continue
log.debug("%s: %s", k, v)
locals()
возвращает словарь локальных переменных. Поведение недокументированное выглядит так, что этот словарь представляет собой представление локальных переменных в режиме реального времени, поэтому он обновляется динамически при объявлении новых локальных переменных, по крайней мере, в некоторых версиях Python (I Использую 3.6.2):
>>> the_locals = locals()
>>> len(the_locals)
8
>>> 'x' in the_locals
False
>>> x = 12
>>> len(the_locals)
9
>>> 'x' in the_locals
True
Итак, проблема вызвана присваиванием k
в методе __init__
во время итерации по этому словарю. Присвоение создает новую локальную переменную, добавляя ее в словарь во время итерации, что является нет-нет и приводит к возникновению ошибки.
Решением было бы перебрать копию словарь, например:
for k, v in dict(locals()).items():
...
Похоже, что это было сообщено на трекер проблем библиотеки на GitHub в 2018 году, но проблема была закрыта без исправления, предположительно потому, что человек кто открыл вопрос не предоставил достаточно информации. Я предлагаю открыть там новую проблему и предоставить как можно больше информации (ссылка на этот вопрос переполнения стека, вероятно, поможет).