2013-07-09 74 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頁面?並弄清楚。 –

相關問題