2013-07-09 2 views
-1

UPDATE: Оператор if не выполняется, что странно, поскольку я тестировал скрипт вне Django и работал только на Python.Переменная, на которую ссылаются до ее назначения

Я знаю, что этот вопрос задавали много раз здесь, но я не могу найти ответ, который поможет мне разобраться в моей ошибке. Здесь ошибка я получаю:

local variable 'what_i_need' referenced before assignment 

Вот мой код в ВИДЕ:

from django.http import HttpResponse 
from django.shortcuts import render 

from urllib2 import urlopen 
from bs4 import BeautifulSoup 

def test(request): 
    someURL = "https://www.example.com/" 
    urlOpen = urlopen(someURL).read() 
    soup = BeautifulSoup(urlOpen) 
    for x in soup.findAll('span'): 
     if 'something' in str(x): 
      info = x.get_text() 
      info = info.split() 
      info = info[0] 
      info = info.replace(".", '') 
      what_i_need = info 
    return HttpResponse(what_i_need) 

Что я делаю неправильно?

ответ

2

Проблема заключается в заявлении if. Если он никогда не выполняется, what_i_need никогда не инициализируется и, следовательно, ошибка (поскольку вы не можете передать унифицированную переменную до HttpResponse). Просто инициализируйте его до None или тому подобное (в соответствии с вашими потребностями)

def test(request): 
    someURL = "https://www.example.com/" 
    urlOpen = urlopen(someURL).read() 
    soup = BeautifulSoup(urlOpen) 
    what_i_need = None   # Initialized here 
    for x in soup.findAll('span'): 
     if 'something' in str(x): 
      info = x.get_text() 
      info = info.split() 
      info = info[0] 
      info = info.replace(".", '') 
      what_i_need = info 
    return HttpResponse(what_i_need) 
+0

Вы правы. Оператор if не выполняется - что странно - потому что, когда я тестирую скрипт не в Django, он работает. Есть идеи? – user2270029

+0

Это зависит от того, что 'soup.findAll ('span')' возвращается. –

+0

Попробуйте напечатать результат 'soup.findAll ('span')' как отдельную страницу Django? И выясните это. –

Смежные вопросы