2015-10-01 98 views
1

我試圖從調用一個函數FOR循環,但得到的錯誤:裏面調用的函數「for」循環拋出一個NameError

from selenium import webdriver 
from selenium.common.exceptions import NoSuchElementException 
from selenium.webdriver.common.keys import Keys 
import time 
from lxml import html 
import requests 
import xlwt 

browser = webdriver.Firefox() # Get local session of firefox 

# 0 wait until the pages are loaded 
browser.implicitly_wait(3) # 3 secs should be enough. if not, increase it 

browser.get("http://ae.bizdirlib.com/taxonomy/term/1493") # Load page 
links = browser.find_elements_by_css_selector("h2 > a") 


for link in links: 
    link.send_keys(Keys.CONTROL + Keys.RETURN) 
    link.send_keys(Keys.CONTROL + Keys.PAGE_UP) 
    time.sleep(5) 
    test() 
    link.send_keys(Keys.CONTROL + 'w') 



def test(self):#test function 
    elems = browser.find_elements_by_css_selector("div.content.clearfix > div > fieldset> div > ul > li > span") 

    for elem in elems: 
     print elem.text 
    elem1 = browser.find_elements_by_css_selector("div.content.clearfix>div>fieldset>div>ul>li>a") 

    for elems21 in elem1: 
     print elems21.text 
    return 0 

test() 
NameError: name 'test' is not defined 

的代碼如下

所以我想調用這個函數,當函數被調用時,我希望數據被複制/粘貼到Excel中。

有人可以幫助我提高代碼嗎?

+0

爲什麼在定義它之前調用函數? –

+0

我在底部定義它。 –

+3

嘗試在頂部定義它。這就是我的意思*在定義它之前調用一個函數*。 –

回答

1

您必須先創建一個function object,然後才能使用它。在你的情況下,你調用一個函數,但它尚未存在,因此沒有定義。正如Kevin所說,定義函數然後嘗試調用它。

UPD:我無法添加評論,因此我在此更新它。 Mark Lutz在他的「學習Python」一書中詳細描述了函數的功能,def的功能以及調用函數時會發生什麼。但我認爲其他任何Python書都會這樣做。

UPD:寫評論並不容易,所以我更新了答案。

如上所述,問題在於您在調用它之後定義函數。例如,讓我們假設我想寫一個寫有「玩得開心」的程序+任何名字。爲了簡單起見,程序中給出了名字。選項1:如果我按照你的意思編寫程序1)調用一個函數2)定義一個函數我將得到一個完全像你所得到的NameError。

計劃:

greet = 'Have fun, ' 

print(greet + name('John')) # I call a function 'name' 

def name(x):    # I define a function 
    return str(x) 

輸出將是:

Traceback (most recent call last): 
    File "C:/Users/nikolay.dudaev/Documents/Private/deffun2.py", line 3, in <module> 
    print(greet + name('John')) 
NameError: name 'name' is not defined 

一切,我需要做的是函數定義的變化的地方,調用函數:

greet = 'Have fun, ' 

def name(x):    # I define a function 
    return str(x) 

print(greet + name('John')) # I call a function 'name' 

而且現在的輸出是:

======= RESTART: C:/Users/nikolay.dudaev/Documents/Private/deffun2.py ======= 
Have fun, John 
>>> 

在這裏,你去!

將您在def之後的內容複製並粘貼在for循環之前,它應該可以工作(儘管我沒有嘗試過您的代碼)。

+0

相當新手到Python如果你可以告訴我爲什麼錯誤。怎麼能解決? –

+0

在重申了這個[鏈接從堆棧SO]後,在自己的類中添加了整個代碼(http://stackoverflow.com/questions/14804084/python-nameerror-name-is-not-defined)。 –

+0

正如你在另外一個問題中看到的那樣,它和類是一樣的:首先你定義一個SECOND的類來使用它。 –