第一部分:问题分析
(pid=14832) UnicodeEncodeError: 'ascii' codec can't encode characters in position 236-240: ordinal not in range(128)
说明编码格式有问题。
第二部分:解决方法
为了解决UnicodeEncodeError
问题,我们可以在 Python 脚本开头添加以下代码,将默认编码设置为utf-8
:
import sys
sys.stdout.reconfigure(encoding='utf-8')
sys.stderr.reconfigure(encoding='utf-8')
第三部分:其他情况
如果保存文件的时候,文件的格式不是utf-8,也可能出错!(比如保存记事本),相关修改方式可见博客:更改记事本txt的编码格式-优快云博客
也有可能是保存的文件的格式维度不对,比如使用:
save_name = './plot/#wk_{}-ep_{}-lr_{}-a_{}-q_mode_{}-k_{}-data_name_{}-{}'.format(num_workers, epoch, lr, alpha_value, args.q_mode, args.Qer_k,args.data_name, extra_name)
save_name = save_name + '.npy'
os.makedirs(os.path.dirname(save_name), exist_ok=True) # 自动创建不存在的目录(如果运行失败,则管理员身份运行)
try:
np.save(save_name, (x, result, result_loss))
except Exception as e:
print(f"保存文件时出错: {e}")
logger.info("~~~~~~~~~~~~~~ ONE TASK IS OVER ~~~~~~~~~~~~~~")
logger.info("~~~~~~~~~~~~~~ ONE TASK IS OVER ~~~~~~~~~~~~~~")
ray.shutdown()
结果为:
ray.shutdown()保存文件时出错: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (3,) + inhomogeneous part.
说明保存的这个文件的数据格式不一致(比如x为一维数组,但是result_loss为二维数组),也会出错,这个时候就需要我们手动修改维度,让其统一就可以啦!