Я делаю веб-гусеничный хостинг, который исчерпывает каждую веб-страницу. Мне дается первая ссылка http://www.someURL.com/42342
. На этой странице X
количество строк выражений. Функции parse
и evaluate
Я оценил эти выражения для чисел. С этими числами я объединяю их по умолчанию (http://www.someURL.com/
), чтобы перейти к другой ссылке. Я стараюсь, чтобы подсчитать, сколько веб-страниц Есть, но я в настоящее время работает в эту ошибку:Список индексов вне диапазона веб-искатель Python
Traceback (most recent call last):
File "test2.py", line 72, in <module>
print url_queue(convert_to_link(URL))
File "test2.py", line 23, in url_queue
new_urls = convert_to_link(url)
File "test2.py", line 13, in convert_to_link
num_list.append(evaluate(parse(expressions)))
File "test2.py", line 62, in evaluate
return stack[0]
IndexError: list index out of range
Я не совсем уверен, почему. Кажется, что каждая функция дает правильный результат. Может ли кто-нибудь помочь указать, где моя логика неправильна в моем коде?
Мой код:
import urllib2
URL = 'http://www.someURL.com/42342'
def convert_to_link(url):
req = urllib2.Request(url)
response = urllib2.urlopen(req)
output_expressions = response.read().splitlines() #return each expression in a list
num_list = []
url_list = []
for expressions in output_expressions:
num_list.append(evaluate(parse(expressions)))
for number in num_list:
url_list.append(newpage_gen(number))
return url_list
def url_queue(url_list):
count = 0
for url in url_list:
new_urls = convert_to_link(url)
url_list.extend(new_urls)
count += 1
return count
def parse (s): # parse expression
s = s.replace('(', ' ').replace(')', ' ').replace(',', ' ')
return s.split()[::-1]
def evaluate (ops): # evaluate expression
stack = []
while ops:
op = ops[0]
ops = ops[1:]
try:
stack.append(int(op))
continue
except: pass
if op == 'add':
arg1, arg2 = stack.pop(), stack.pop()
stack.append(arg1 + arg2)
continue
if op == 'multiply':
arg1, arg2 = stack.pop(), stack.pop()
stack.append(arg1 * arg2)
continue
if op == 'abs':
arg1 = stack.pop()
stack.append(abs(arg1))
continue
if op == 'subtract':
arg1, arg2 = stack.pop(), stack.pop()
stack.append(arg1 - arg2)
continue
return stack[0]
def newpage_gen(page_num): # create new link
url_template = 'http://www.someURL.com/'
new_url = url_template + str(page_num)
return new_url
print "TESTING"
print url_queue(convert_to_link(URL))
Можете ли вы опубликовать выражение, которое вызывает проблему? Например, вывод 'print ops', когда вы вводите функцию оценки? – perreal
@ Liondancer Ожидаете ли вы, что инструкции if запускаться каждый раз? Есть ли сценарий, когда ни один из них не должен оцениваться как истинный? – fdsa