2013-07-09 52 views
-1

更新: 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页面?并弄清楚。 –

相关问题