-
selenium 4 python3.12 为什么关不掉Devtools listen的提示?
最近在使用python过重遇到这个问题,NameError: name 'xxx' is not defined
,在学习python或者在使用python的过程中这个问题大家肯定都遇到过,在这里我就这个问题总结以下几种情况:
错误NameError: name 'xxx' is not defined总结
- 情况一:要加双引号(" ")或者(' ')而没加
- 情况二:字符缩进格式的问题
- 情况三:`if __name__=='__main__' :` 没有和`class类`进行对齐
- 情况四:NameError: name 'file' is not defined
- 情况五:NameError: name '模块' is not defined
- 情况六:NameError: name '`reload`' is not defined
- 情况七:全局变量的问题
- 情况八:两个.py文件的函数或类调用问题
情况一:要加双引号(" ")或者(’ ')而没加
代码中要加双引号(" ")或者(’ ')而没加的可能会出现这种问题,这种情况要么自己手残你给忘了,要么。。。。你懂的。。。。
情况二:字符缩进格式的问题
代码中字符缩进格式的问题,要么是你使用Tab键或者空格键手残了多打了,要么是代码中根本没有字符缩进,那就更不可原谅了。见如下代码:
正确的代码如下:def askURL(url): request = urllib.request.Request(url) try: response = urllib.request.urlopen(request) html = response.read() except urllib.error.URLError as e: if hasattr(e, "code"): print(e.code) if hasattr(e, "reason"): print(e.reason) return html
可你的偏偏却是这样的:
def askURL(url): global html request = urllib.request.Request(url) try: response = urllib.request.urlopen(request) html = response.read() except urllib.error.URLError as e: if hasattr(e, "code"): print(e.code) if hasattr(e, "reason"): print(e.reason) return html
这不向你报错向谁报错。。。。。
以上两种情况不可原谅。。。。
情况三:
if __name__=='__main__' :
没有和class类
进行对齐if __name__=='__main__' :
要和class类
进行对齐,不然也可能出现这样的问题。如下:
正确如下:class func(object): def f(self): return "hello word" if __name__=='__main__' : print(func().f())
错误如下:
class func(object): def f(self): return "hello word" if __name__=='__main__' : print(func().f())
__name__=='__main__'
是python脚本文件运作的开端,所以要顶头写。情况四:NameError: name ‘file’ is not defined
问题:
file_name = "./movie.xlsx" fp = file(file_name, 'wb')
在使用
file函数
时遇到:NameError: name 'file' is not defined
原因:python版本已经升级,对函数的使用会有变化。
解决: 将
file函数
改为open函数
fp = file(file_name, 'wb') 修改为 fp = open(file_name, 'wb')
情况五:NameError: name ‘模块’ is not defined
该导入的模块没导入,在调用时也会出现这样的问题:
以下代码使用了urllib
模块:如果没有import urllib
那肯定出错def askURL(url): request = urllib.request.Request(url) try: response = urllib.request.urlopen(request) html = response.read() except urllib.error.URLError as e: if hasattr(e, "code"): print(e.code) if hasattr(e, "reason"): print(e.reason) return html
没有使用
import urllib
报错:情况六:NameError: name ‘
reload
’ is not defined解决NameError: name ‘
reload
’ is not defined 的问题import sys reload(sys) sys.setdefaultencoding("utf-8")
出现错误:
NameError: name 'reload' is not defined
原因:
对于 Python 2.X:import sys reload(sys) sys.setdefaultencoding("utf-8")
对于低于Python 3.3版本的:
import imp imp.reload(sys)
对于高于 Python 3.4版本的:
import importlib importlib.reload(sys)
注意:
Python 3 与 Python 2 默认编码有区别,Python 3 默认使用的编码就是utf-8编码,而且Python 3 的 sys 模块库里面已经没有 setdefaultencoding() 这个函数了情况七:全局变量的问题
问题:
第一函数中使用了html变量:def askURL(url): request = urllib.request.Request(url) try: response = urllib.request.urlopen(request) html = response.read() except urllib.error.URLError as e: if hasattr(e, "code"): print(e.code) if hasattr(e, "reason"): print(e.reason) return html
第二个函数中也用到了html变量:
def getData(baseurl): ... for i in range(0, 10): url = baseurl + str(i * 25) html_m = askURL(url) soup = BeautifulSoup(html_m, "html.parser") ...
由于没有重新html进行定义,出现如下问题:
解决:
在html第一次出现的的地方(第一个函数里),用python自带的global函数
把它变成全局变量。def askURL(url): global html # #将html变成全局变量 request = urllib.request.Request(url) try: response = urllib.request.urlopen(request) html = response.read() except urllib.error.URLError as e: if hasattr(e, "code"): print(e.code) if hasattr(e, "reason"): print(e.reason) return html
情况八:两个.py文件的函数或类调用问题
一个.py文件要调用另一个.py文件中的函数或者类时,需要添加该代码文件所在路径,否则会报“
NameError: name 'XXX' is not defined
”的错误。
比如在编写的代码中需要使用另外一个代码文件tool.py的一个函数 ,那么只用在头文件下输入如下语句:import sys sys.path.append('../') import tool
能够出现NameError: name ‘xxx’ is not defined问题的大致都在这,遇到问题时首先先检查一下是否自己代码书写有问题,其次找找是不是模块没导入或者定义,最后可能就是自己写的代码有逻辑问题。