Не удается преобразовать из System.net.HTTPResponseMessage в FileModel

Это потому, что data - итератор, вы можете использовать итератор только один раз. Например:

lst = [1, 2, 3]
it = iter(lst)

next(it)
=> 1
next(it)
=> 2
next(it)
=> 3
next(it)
=> StopIteration

Если мы перемещаем некоторые данные с помощью цикла for, последний StopIteration приведет к его завершению в первый раз. Если мы снова попытаемся перебрать его , мы будем получать исключение StopIteration, потому что итератор уже был использован.

Теперь для второго вопроса: что делать, если нам do нужно переходить через итератор более одного раза? Простым решением было бы создать список с элементами, и мы можем проходить его столько раз, сколько необходимо. Это все в порядке, если в списке несколько элементов:

data = list(db[3])

Но если есть много элементов, лучше создать независимые итераторы, используя tee() :

import itertools
it1, it2 = itertools.tee(db[3], n=2) # create as many as needed

Теперь мы можем поочередно перебирать по очереди:

for e in it1:
    print("doing this one time")

for e in it2:
    print("doing this two times")

0
задан Karthika Subramanian 31 December 2018 в 13:37
поделиться