Completed code hitting two issues

  • 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问题的大致都在这,遇到问题时首先先检查一下是否自己代码书写有问题,其次找找是不是模块没导入或者定义,最后可能就是自己写的代码有逻辑问题。
     
  • 28
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值