Найти - Пользователи
Полная версия: Зацикливание
Начало » Python для новичков » Зацикливание
1
anemak
Приветствую, уважаемые.

Есть функция:

def tst(i): # i - элемент из итерируемой последовательности
try:
print 'Obrabatyvaem: %s' % i
url = "http://site.ru%s" % i
source = urllib2.urlopen(url)
regex = re.compile("<a\s*href\s*=\s*(\"|')(http://www.site.ru)*(/(regions|programms)/(\d+/||bank\d+/city\d+/))(\"|')", re.I)
href = regex.finditer(source.read())
l = []
for match in href:
select = match.group(3)
l.append(select)
return l # Возвращаем список полученных значений
except urllib2.HTTPError, e: # исключение обрабатывающее ошибку(например, 504)
print "HTTPError:", e.code
time.sleep(60)
# в этом месте собственно вопрос, как мне после получения ошибки
# передать значение в try? то есть повторно обработать этот элемент "i"
# на котором возникло исключение?
Испробовал несколько способов, но либо не возвращается список l, либо возвращается неполный.
Ginibe
А в ветке except разве нельзя воспользоваться оператором return ?
Такой конструкцией не пользовался… не было необходимости, потому вопрос без подвоха.
Скажем, если твоя функция tst(arg) возвращает пустой список можна же повторить обращение к ней с тем же аргументом. И опять попадаешь в ветку try … или я не прав ?
doza_and
Вечный кайф
while 1:
try:
....
return
except SomeType:
....
anemak
Ginibe
А в ветке except разве нельзя воспользоваться оператором return ?
Такой конструкцией не пользовался… не было необходимости, потому вопрос без подвоха.
Скажем, если твоя функция tst(arg) возвращает пустой список можна же повторить обращение к ней с тем же аргументом. И опять попадаешь в ветку try … или я не прав ?
Пустой список мне не нужен, а просто так заного я функцию запустить не могу, т.к. на это есть причины.

doza_and
while 1:
Кажется While True - это верное решение, тест будет идти долго. Не знал этой особенности, спасибо!

До поры до времени все нормально, потом появляются ошибки вида

Exception in thread Thread-217:
Traceback (most recent call last):
File "C:\Python27\lib\threading.py", line 552, in __bootstrap_inner
self.run()
File "C:\Users\ANEMAK\PycharmProjects\[002]Многопоточный парсер[in developing]\multi.py", line 75, in run
ret = self.callback(args)
File "C:/Users/ANEMAK/PycharmProjects/[002]Многопоточный парсер[in developing]/test.py", line 17, in tst
source = urllib2.urlopen(url)
File "C:\Python27\lib\urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "C:\Python27\lib\urllib2.py", line 394, in open
response = self._open(req, data)
File "C:\Python27\lib\urllib2.py", line 412, in _open
'_open', req)
File "C:\Python27\lib\urllib2.py", line 372, in _call_chain
result = func(*args)
File "C:\Python27\lib\urllib2.py", line 1199, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "C:\Python27\lib\urllib2.py", line 1174, in do_open
raise URLError(err)
URLError: <urlopen error [Errno 10051] >
Но с этим уже завтра….
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