Найти - Пользователи
Полная версия: Возврат к предыдущей итерации
Начало » Python для новичков » Возврат к предыдущей итерации
1
tibs
Цикл for проходит по коллекции ссылок, открывая их и кое-что делая с полученными данными. Но иногда возникает ошибка HTTP Error 404 - ссылка пролетает получается. Можно ли как-то вернуться к предыдущей итерации цикла с вот этой ссылкой, подождать некоторое время и заново ее попытаться открыть?
Enchantner
tibs
Используйте вместо коллекции ссылок очередь (модуль Queue) и при возникновении ошибки переносите ссылку снова в ее начало.
tibs
А чем тогда цикл for заменить? Он же вроде только с коллекциями работает.
bw
while not myqueue.empty():
mydata = myqueue.get()
>>> import Queue
>>> help(Queue.Queue.get)
Help on method get in module Queue:

get(self, block=True, timeout=None) unbound Queue.Queue method
Remove and return an item from the queue.

If optional args 'block' is true and 'timeout' is None (the default),
block if necessary until an item is available. If 'timeout' is
a positive number, it blocks at most 'timeout' seconds and raises
the Empty exception if no item was available within that time.
Otherwise ('block' is false), return an item if one is immediately
available, else raise the Empty exception ('timeout' is ignored
in that case).
..bw
o7412369815963
tibs
А чем тогда цикл for заменить? Он же вроде только с коллекциями работает.
for работает и с итераторами
bw
> for работает и с итераторами
А если прочитать первые два поста, то как ты это себе представляешь?

myqueue = []
init_queue(myqueue)

for link in myqueue:
try:
process_link(link)
except Exception:
myqueue.append(link)
Так :-) ?

..bw
Isem
Ну что-то вроде этого:
for ref in ref_source:
while not process_ref( ref ):
do_wait() # ждем
tibs
    m=re.findall(re1,r,16)
for topic_id in m:

try:

# open torrent url
torrent_url = 'http://{{tracker}}/forum/dl.php?t=%s' % topic_id
handle = opener.open(torrent_url, data)

# write it to output file
out = open('torrent/[{{tracker}}].t%s.torrent'%topic_id, 'wb')
out.write(handle.read())
out.close()
except Exception,e:
print e
open('%s.html'%topic_id,'wb+').write(str(e))
else:
print u"%s Торрент успешно сохранен"%topic_id
time.sleep(5)
Вот часть кода. После re.findall переменная m - это что? список? И как мне код поправить? Просто иногда сайт лежит и торренты нельзя скачать - 404. В этом случае, например, подождать 1 минуту.
Enchantner
tibs
torrent_url = 'http://pornolab.net/forum/dl.php?t=%s' % topic_id
ути какое палево
tibs
После re.findall переменная m - это что? список?
m - итератор по группам, найденным регуляркой
tibs
И как мне код поправить?
Сначала создай Queue и в цикле тупо засунь туда урлы. Потом делай try:except на открытие каждого урла и в случае ошибки запихивай этот урл обратно в очередь. Код написать не успел, но общий принцип должен быть понятен.
bw
> итератор
Неа, список это. Не путай людей умными словами.
tibs, выше тебе несколько вариантов было дано, включай голову уже. Например Isem'овский возьми, или мой.

..bw
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB