我知道有很多像这样的问题,我试着把它们都读了一遍。我正在做的是使用多处理库通过Python Selenium解析网页。因此,我有3个列表要提供给处理它们的函数。首先我编写函数,然后启动浏览器istance,最后启动3个过程。
import ...
def parsing_pages(list_with_pages_to_parse):
global browser
#do stuff
if __name__ == '__main__':
browser = webdriver.Chrome(..., options = ...)
browser.get(...)
lists_with_pages_to_parse = [ [...], [...], [...] ]
pool.mp.Pool(3)
pool.map(parsing_pages, lists_with_pages_to_parse)
pool.close
pool.join
错误:
NameError: name 'browser' is not defined
Traceback (most recent call last):
File "c:Users39338Desktopprogram.py", line 323, in <module>
pool.map(parsing_pages, lists_with_pages_to_parse)
File "C:Users39338AppDataLocalProgramsPythonPython310libmultiprocessingpool.py", line 364, in map
return self._map_async(func, iterable, mapstar, chunksize).get()
File "C:Users39338AppDataLocalProgramsPythonPython310libmultiprocessingpool.py", line 771, in get
raise self._value
NameError: name 'browser' is not defined
我使用global来允许";浏览器";在函数内部使用。我认为问题在于函数是在我创建";浏览器";,但当我试图把它放在主要部分之后时,我会得到一个错误,即调用时找不到函数。
当__name__ != '__main__'
(来自另一个:文件、线程或进程(时调用此函数将永远不会初始化browser
。示例:
def f():
global browser
browser
if __name__ == '__main__':
browser = None
# Calling f will not raise an error
f()
def f():
global browser
browser
if __name__ != '__main__':
browser = None
# Calling f will will now raise an error
f()
我认为现在的情况是,您正在制作一个pool
,并且池从另一个进程运行parsing_pages()
,其中__name__ != '__main__'
。
您需要执行以下操作之一:
- 将
browser
作为参数传递到函数中 - 在
if
语句之外初始化浏览器
您应该添加print(__name__)
来检查它的值。它可能会返回文件名,而不是__main__
。
问题解决后编辑:
当您在没有线程、处理池或来自其他文件的情况下运行文件时,__name__
将等于'__main__'
即当您自己运行它时由于它是在多处理池中运行的,因此无法满足__name__ == '__main__'
。因此,条件决不允许初始化browser
。
下面将对此进行更详细的讨论:
易于消化的视频(在
Python2
中,但这很好(Python教程:if __name__=='__main__'(Youtube |8:42(
最详细的文章(堆栈溢出(
如果__name__=="__main__":做
';如果__name__=="__main__":';
如果你对感兴趣
什么';s是主函数的点和/或__name__=="__main__";签入Python?
首先:尽量避免使用全局关键字。随着代码变得越来越长和复杂,它会导致代码不稳定。
无论如何,您的代码说没有定义global,因为您没有在函数范围之外定义名为browser的全局变量。
删除全局关键字。您不需要它,因为您正在将浏览器返回到函数本身。
别忘了查看这些资源:
名称错误:全局名称';浏览器';未定义
https://python-forum.io/thread-12073.html
https://githubhot.com/repo/Matrix07ksa/Brute_Force/issues/24
https://github.com/MasonStooksbury/Free-Games/issues/41