哈岁NB 发表于 2023-7-19 11:48:22

变量

本帖最后由 哈岁NB 于 2023-7-19 11:49 编辑

请问这个list_1为什么会报错,他不是全局变量吗
list_1 = []
#解析出每个职位的id
def parse_id():   
    list_1 += re.findall(pattern, brower.page_source)
    return list_1

isdkz 发表于 2023-7-19 11:48:35

很抱歉,但是您的问题没有提供足够的信息,以便我可以给出具体的答案。为了更好地帮助您,我需要看到您的代码,特别是涉及到您提到的 list_1 变量的部分。然后,我才能确定为什么会出现错误。可能的问题可能包括但不限于命名冲突、变量未初始化、作用域问题等。如果您能提供更多的上下文信息,我将很乐意为您提供更具体的帮助。

陶远航 发表于 2023-7-19 11:48:43

根据您提供的代码,list_1 被定义为一个局部变量,并且在 for 循环中进行了赋值操作,但是在使用 print 语句打印 list_1 时报错,提示该变量未定义。

这个错误的原因是变量的作用域(scope)问题。在 Python 中,如果在函数内部或某个代码块内定义了一个变量,它默认将被视为局部变量,只有在该函数或代码块的范围内才能访问。

在您的代码中,list_1 是在 for 循环的代码块中定义的,因此它只在该代码块内部可见。当尝试在循环外部的 print 语句中访问 list_1 时,会出现变量未定义的错误。

要解决这个问题,您可以在循环之前将 list_1 初始化为一个空列表,这样就可以在整个代码块中对其进行访问和修改:

list_1 = []# 在循环之前初始化 list_1

for i in range(2, page+1):
    list_1 += re.findall(pattern, brower.page_source)
    next_button.click()
    print(f'爬取第{i}页')

print(len(list_1))
print(list_1)
brower.close()


通过将 list_1 的初始化放在循环之前,将其定义为全局变量,从而使其在整个代码块中都可见。这样,您应该能够成功访问和打印 list_1 变量。

希望这个解释对您有所帮助!如果您有任何进一步的问题,请随时提问。

哈岁NB 发表于 2023-7-19 11:49:13

isdkz 发表于 2023-7-19 11:48
很抱歉,但是您的问题没有提供足够的信息,以便我可以给出具体的答案。为了更好地帮助您,我需要看到您的代 ...


list_1 = []
#解析出每个职位的id
def parse_id():   
    list_1 += re.findall(pattern, brower.page_source)
    return list_1

sfqxx 发表于 2023-7-19 11:50:32

哈岁NB 发表于 2023-7-19 11:49


在函数内部修改全局变量需要使用`global`关键字进行声明,否则Python会认为`list_1`是一个局部变量,因此在函数内部对`list_1`进行修改时会报错。可以将代码改为:

iist_1 = []
# 解析出每个职位的id
def parse_id():
    global list_1# 声明list_1为全局变量
    list_1 += re.findall(pattern, browser.page_source)
    return list_1

这样就可以在函数内部对全局变量`list_1`进行修改了。

求最佳答案{:10_254:}

歌者文明清理员 发表于 2023-7-19 11:50:52

sfqxx 发表于 2023-7-19 11:50
在函数内部修改全局变量需要使用`global`关键字进行声明,否则Python会认为`list_1`是一个局部变量,因此 ...

《发表于 刚刚》
aaaaaaaaa

哈岁NB 发表于 2023-7-19 11:52:24

sfqxx 发表于 2023-7-19 11:50
在函数内部修改全局变量需要使用`global`关键字进行声明,否则Python会认为`list_1`是一个局部变量,因此 ...

解决了,感谢感谢

sfqxx 发表于 2023-7-19 11:53:40

哈岁NB 发表于 2023-7-19 11:52
解决了,感谢感谢

不客气{:5_109:}
页: [1]
查看完整版本: 变量