我的问题代码位子是/opt/ros/melodic/lib/python2.7/dist-packages/sitecustomize.py,这里每个人的情况可能不同,在linux系统下,可通过locate sitecustomize.py命令寻找系统中的该文件。
问题代码内容import sys
reload(sys)
sys.setdefaultencoding('utf8')
报错原因分析:
报错代码是reload(sys),在Python 2.7 及以下版本中reload为内置命令,在执行以上代码时不会报错。但是对于更高版本的Python 则需要如下操作才不至于报错
# Python 3.3及以下版本 import imp imp.reload(sys) # Python 3.4及以上版本 : import importlib importlib.reload(sys)
参考:【错误记录】执行 Python 程序报错 ( NameError: name ‘reload‘ is not defined )
为了同时兼容python2与python3,提出以下方案
解决方案:在python3中'utf8'为默认的编码格式,即使没有执行sys.setdefaultencoding('utf8')语句也不会有影响。但对于python2.7则必须执行该语句,故应对两种情况进行分类讨论,最终代码如下:
import platform
import sys
# 获取python版本号
version = platform.python_version()
# 获取python主版本号
main_version = int(version.split('.')[0])
# 根据版本号不同分类讨论
if main_version >= 3:
import importlib
importlib.reload(sys)
else:
reload(sys)
sys.setdefaultencoding('utf8')



