“本地变量在赋值之前被引用”,的确没有提及,并且代码已经进行了多次迭代

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了“本地变量在赋值之前被引用”,的确没有提及,并且代码已经进行了多次迭代相关的知识,希望对你有一定的参考价值。

希望您能帮助我。

我正在研究Python上的Selenium。我需要对8000个以上的网址执行相同的过程,因此我定义了以下函数:

def obtenerFrecuencia(paradero):

    driver = webdriver.Chrome(r'C:\phantomjs-2.1.1-windows\bin\chromedriver.exe')  # Optional argument, if not specified will search path.
    driver.get(paradero)

    sleep(random.uniform(0, 0.3))

    id_base = driver.find_elements_by_xpath('//h3[@class="focus"]')

    for info in id_base:  # id
        variableunica = str(info.get_attribute("outerText")

    driver.quit()

    return variableunica

而且我将8000个URL保存在名为链接的列表中。

[当我继续运行以下代码来存储代码的发现时:

frecuencia = []

for link in links:
    temp = obtenerFrecuencia(link)
    frecuencia.append(temp)

我收到以下错误:

UnboundLocalError:分配前引用了局部变量'variableunica'

但是,我没有在文档中的任何地方引用局部变量,所以我并不清楚我为什么会遇到这个问题。我一直在阅读其他具有相同问题的问题,但是它们无关紧要,因为到目前为止,尚未提到任何解决方案,甚至与我的问题无关。因此,我认为在此处发布问题会有所帮助。

此外,此错误在不同的代码迭代中显示,最高的是500,最低的是21。因此,代码肯定可以正常工作,但我想可以对其进行改进以获取8000的信息。连续输入网址,避免出现此错误。

所以问题如下:

  • 如何避免此错误(如何以这种方式定义变量)?
  • 为什么显示它,因为我之前没有定义该局部变量?

请不要拒绝这个问题,如果您需要更多信息,我可以扩展这个问题。

谢谢

答案

如果您的代码未进入信息循环,则在使用前未声明variableunica,然后在赋值之前引用了变量variableunica

def obtenerFrecuencia(paradero):

    driver = webdriver.Chrome(r'C:\phantomjs-2.1.1-windows\bin\chromedriver.exe')     # Optional argument, if not specified will search path.
    driver.get(paradero)


    sleep(random.uniform(0, 0.3))

    id_base = driver.find_elements_by_xpath('//h3[@class="focus"]')
    variableunica=""
    for info in id_base:  # id
        variableunica = str(info.get_attribute("outerText")

    driver.quit()

    return variableunica
另一答案

问题出在这里。

id_base = driver.find_elements_by_xpath('//h3[@class="focus"]')
for info in id_base:  # id
    variableunica = str(info.get_attribute("outerText")

如果id_base是空列表怎么办?

然后,它永远不会在下一行中循环通过id_base,并且variableunica从未分配任何值。然后您尝试将其退回。

解决方案:

添加

variableunica = ""

进入循环之前。

以上是关于“本地变量在赋值之前被引用”,的确没有提及,并且代码已经进行了多次迭代的主要内容,如果未能解决你的问题,请参考以下文章

Python聚类分析作业代写代做人工智能Python作业代写

JVM 知识点补充——永久代和元空间

JVM垃圾回收--年轻代年老点和持久代

SwiftUI - 如何获取新创建的按钮的确切中心坐标/位置

在嵌入中提及

为啥在Linux中strlwr()不能编译通过,已经查看过<string.h>,的确在头文件中没有