在'For'循环中调用一个函数会引发一个NameError

我试图从FOR循环中调用一个函数,但得到的错误:

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

代码如下:

 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 

所以我想调用函数,当函数被调用的时候,我想要把数据复制/粘贴到Excel中。

有人可以帮助我提高代码?

您必须先创build一个function object然后才能使用它。 在你的情况下,你调用一个函数,但它还没有存在,因此没有定义。 正如凯文所说,定义函数,然后尝试调用它。

UPD:我不能添加评论,所以我在这里更新它。 Mark Lutz在“学习Python”一书中详细描述了函数如何工作, def是什么以及在调用函数时会发生什么。 但是我认为其他任何Python书都会这样做。

UPD:写评论并不容易,所以我更新了答案。

如上所述,问题在于您在调用函数之后定义函数。 例如,假设我想写一个写有“玩得开心”的程序+任何名字。 为了简单起见,程序中给出了名字。 select1:如果我写程序就像你做的意思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循环之前,它应该可以工作(尽pipe我没有尝试你的代码)。