前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python中对错误NameError: name ‘xxx‘ is not defined进行总结

Python中对错误NameError: name ‘xxx‘ is not defined进行总结

原创
作者头像
奈何缘浅wyj
修改2021-01-26 14:27:39
122.3K0
修改2021-01-26 14:27:39
举报
文章被收录于专栏:python技术开发python技术开发

最近在使用python过重遇到这个问题,NameError: name 'xxx' is not defined,在学习python或者在使用python的过程中这个问题大家肯定都遇到过,在这里我就这个问题总结以下几种情况:

错误NameError: name 'xxx' is not defined总结

声明:这只针对python初学者,python大牛请自动略过。。。

情况一:要加双引号(" ")或者(’ ')而没加

代码中要加双引号(" ")或者(’ ')而没加的可能会出现这种问题,这种情况要么自己手残你给忘了,要么。。。。你懂的。。。。

情况二:字符缩进格式的问题

代码中字符缩进格式的问题,要么是你使用Tab键或者空格键手残了多打了,要么是代码中根本没有字符缩进,那就更不可原谅了。见如下代码: 正确的代码如下:

代码语言:javascript
复制
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
1234567891011

可你的偏偏却是这样的:

代码语言:javascript
复制
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
123456789101112

这不向你报错向谁报错。。。。。

以上两种情况不可原谅。。。。

情况三:if __name__=='__main__' : 没有和class类进行对齐

if __name__=='__main__' : 要和class类进行对齐,不然也可能出现这样的问题。如下: 正确如下:

代码语言:javascript
复制
class func(object):
    def f(self):
        return "hello word"
if __name__=='__main__' :
    print(func().f())
12345

错误如下:

代码语言:javascript
复制
class func(object):
    def f(self):
        return "hello word"
	if __name__=='__main__' :
    	print(func().f())
12345

__name__=='__main__'是python脚本文件运作的开端,所以要顶头写。

情况四:NameError: name ‘file’ is not defined

问题

代码语言:javascript
复制
 file_name = "./movie.xlsx" 
 fp = file(file_name, 'wb')
12

在使用file函数时遇到:NameError: name 'file' is not defined

原因:python版本已经升级,对函数的使用会有变化。

解决:file函数改为open函数

代码语言:javascript
复制
fp = file(file_name, 'wb')
修改为
fp = open(file_name, 'wb')
123

情况五:NameError: name ‘模块’ is not defined

该导入的模块没导入,在调用时也会出现这样的问题: 以下代码使用了urllib模块:如果没有import urllib那肯定出错

代码语言:javascript
复制
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
1234567891011

没有使用import urllib报错:

在这里插入图片描述
在这里插入图片描述

情况六:NameError: name ‘reload’ is not defined

解决NameError: name ‘reload’ is not defined 的问题

代码语言:javascript
复制
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
123

出现错误:NameError: name 'reload' is not defined

原因: 对于 Python 2.X:

代码语言:javascript
复制
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
123

对于低于Python 3.3版本的:

代码语言:javascript
复制
import imp
imp.reload(sys)
12

对于高于 Python 3.4版本的:

代码语言:javascript
复制
import importlib
importlib.reload(sys)
12

注意: Python 3 与 Python 2 默认编码有区别,Python 3 默认使用的编码就是utf-8编码,而且Python 3 的 sys 模块库里面已经没有 setdefaultencoding() 这个函数了

情况七:全局变量的问题

问题: 第一函数中使用了html变量:

代码语言:javascript
复制
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
1234567891011

第二个函数中也用到了html变量:

代码语言:javascript
复制
def getData(baseurl):
	...
	for i in range(0, 10):
        url = baseurl + str(i * 25)
        html_m = askURL(url)
        soup = BeautifulSoup(html_m, "html.parser")
    ...
1234567

由于没有重新html进行定义,出现如下问题:

在这里插入图片描述
在这里插入图片描述

解决: 在html第一次出现的的地方(第一个函数里),用python自带的global函数把它变成全局变量。

代码语言:javascript
复制
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
123456789101112

情况八:两个.py文件的函数或类调用问题

一个.py文件要调用另一个.py文件中的函数或者类时,需要添加该代码文件所在路径,否则会报“NameError: name 'XXX' is not defined”的错误。 比如在编写的代码中需要使用另外一个代码文件tool.py的一个函数 ,那么只用在头文件下输入如下语句:

代码语言:javascript
复制
import sys
sys.path.append('../')
import tool
123

能够出现NameError: name ‘xxx’ is not defined问题的大致都在这,遇到问题时首先先检查一下是否自己代码书写有问题,其次找找是不是模块没导入或者定义,最后可能就是自己写的代码有逻辑问题。 如果出现的问题以上没有可加wx:happy96wyj进行交流

欢迎各位小伙伴关注wx公众号:做一个柔情的程序猿

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 错误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文件的函数或类调用问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档