Python UnicodeEncodeError:&x27;ascii';编解码器可以';t编码位置18-23的字符:序号不在范围内(128)

Python UnicodeEncodeError:&x27;ascii';编解码器可以';t编码位置18-23的字符:序号不在范围内(128),python,ascii,encode,Python,Ascii,Encode,我试着去适应这个模型,但有一个奇怪的错误 所以,我有Win10(64),Python 3.7 这是我的代码: clf = LogisticRegression(solver='saga') param_grid = { 'C': np.arange(1, 5), 'penalty': ['l1', 'l2'], } search = GridSearchCV(clf, param_grid, n_jobs=-1, cv=5, refit=True, scoring='accura

我试着去适应这个模型,但有一个奇怪的错误 所以,我有Win10(64),Python 3.7 这是我的代码:

clf = LogisticRegression(solver='saga')
param_grid = {
    'C': np.arange(1, 5),
    'penalty': ['l1', 'l2'],
}
search = GridSearchCV(clf, param_grid, n_jobs=-1, cv=5, refit=True, scoring='accuracy')
search.fit(feature_matrix, labels)
这是回溯:

---------------------------------------------------------------------------
UnicodeEncodeError                        Traceback (most recent call last)
<ipython-input-13-93a1aa3c1ec2> in <module>
     12 
     13 
---> 14 search.fit(feature_matrix, labels)
     15 

C:\Anaconda3\lib\site-packages\sklearn\utils\validation.py in inner_f(*args, **kwargs)
     71                           FutureWarning)
     72         kwargs.update({k: arg for k, arg in zip(sig.parameters, args)})
---> 73         return f(**kwargs)
     74     return inner_f
     75 

C:\Anaconda3\lib\site-packages\sklearn\model_selection\_search.py in fit(self, X, y, groups, **fit_params)
    693                                     verbose=self.verbose)
    694         results = {}
--> 695         with parallel:
    696             all_candidate_params = []
    697             all_out = []

C:\Anaconda3\lib\site-packages\joblib\parallel.py in __enter__(self)
    709     def __enter__(self):
    710         self._managed_backend = True
--> 711         self._initialize_backend()
    712         return self
    713 

C:\Anaconda3\lib\site-packages\joblib\parallel.py in _initialize_backend(self)
    720         try:
    721             n_jobs = self._backend.configure(n_jobs=self.n_jobs, parallel=self,
--> 722                                              **self._backend_args)
    723             if self.timeout is not None and not self._backend.supports_timeout:
    724                 warnings.warn(

C:\Anaconda3\lib\site-packages\joblib\_parallel_backends.py in configure(self, n_jobs, parallel, prefer, require, idle_worker_timeout, **memmappingexecutor_args)
    495             n_jobs, timeout=idle_worker_timeout,
    496             env=self._prepare_worker_env(n_jobs=n_jobs),
--> 497             context_id=parallel._id, **memmappingexecutor_args)
    498         self.parallel = parallel
    499         return n_jobs

C:\Anaconda3\lib\site-packages\joblib\executor.py in get_memmapping_executor(n_jobs, **kwargs)
     18 
     19 def get_memmapping_executor(n_jobs, **kwargs):
---> 20     return MemmappingExecutor.get_memmapping_executor(n_jobs, **kwargs)
     21 
     22 

C:\Anaconda3\lib\site-packages\joblib\executor.py in get_memmapping_executor(cls, n_jobs, timeout, initializer, initargs, env, temp_folder, context_id, **backend_args)
     40         _executor_args = executor_args
     41 
---> 42         manager = TemporaryResourcesManager(temp_folder)
     43 
     44         # reducers access the temporary folder in which to store temporary

C:\Anaconda3\lib\site-packages\joblib\_memmapping_reducer.py in __init__(self, temp_folder_root, context_id)
    529             # exposes exposes too many low-level details.
    530         context_id = uuid4().hex
--> 531         self.set_current_context(context_id)
    532 
    533     def set_current_context(self, context_id):

C:\Anaconda3\lib\site-packages\joblib\_memmapping_reducer.py in set_current_context(self, context_id)
    533     def set_current_context(self, context_id):
    534         self._current_context_id = context_id
--> 535         self.register_new_context(context_id)
    536 
    537     def register_new_context(self, context_id):

C:\Anaconda3\lib\site-packages\joblib\_memmapping_reducer.py in register_new_context(self, context_id)
    558                 new_folder_name, self._temp_folder_root
    559             )
--> 560             self.register_folder_finalizer(new_folder_path, context_id)
    561             self._cached_temp_folders[context_id] = new_folder_path
    562 

C:\Anaconda3\lib\site-packages\joblib\_memmapping_reducer.py in register_folder_finalizer(self, pool_subfolder, context_id)
    588         # semaphores and pipes
    589         pool_module_name = whichmodule(delete_folder, 'delete_folder')
--> 590         resource_tracker.register(pool_subfolder, "folder")
    591 
    592         def _cleanup():

C:\Anaconda3\lib\site-packages\joblib\externals\loky\backend\resource_tracker.py in register(self, name, rtype)
    189         '''Register a named resource, and increment its refcount.'''
    190         self.ensure_running()
--> 191         self._send('REGISTER', name, rtype)
    192 
    193     def unregister(self, name, rtype):

C:\Anaconda3\lib\site-packages\joblib\externals\loky\backend\resource_tracker.py in _send(self, cmd, name, rtype)
    202 
    203     def _send(self, cmd, name, rtype):
--> 204         msg = '{0}:{1}:{2}\n'.format(cmd, name, rtype).encode('ascii')
    205         if len(name) > 512:
    206             # posix guarantees that writes to a pipe of less than PIPE_BUF

UnicodeEncodeError: 'ascii' codec can't encode characters in position 18-23: ordinal not in range(128)
---------------------------------------------------------------------------
UnicodeEncodeError回溯(最近一次呼叫最后一次)
在里面
12
13
--->14搜索拟合(特征矩阵、标签)
15
C:\Anaconda3\lib\site packages\sklearn\utils\validation.py在内部文件中(*args,**kwargs)
71未来警告)
72 kwargs.update({k:arg代表k,arg在zip中(sig.parameters,args)})
--->73返回f(**kwargs)
74返回内部\u f
75
C:\Anaconda3\lib\site packages\sklearn\model\u selection\\u search.py in fit(self、X、y、groups、**fit\u参数)
693 verbose=self.verbose)
694结果={}
-->695与平行:
696所有候选参数=[]
697全部输出=[]
C:\Anaconda3\lib\site packages\joblib\parallel.py in\uuuuu enter\uuuuu(self)
709定义输入(自我):
710 self.\u managed\u backend=True
-->711自初始化后端()
712回归自我
713
C:\Anaconda3\lib\site packages\joblib\parallel.py位于\u initialize\u后端(self)
720试试:
721 n_jobs=self.\u backend.configure(n_jobs=self.n_jobs,parallel=self,
-->722**self.\u后端\u参数)
723如果self.timeout不是None且不是self.\u backend.supports\u timeout:
724.warn(
配置中的C:\Anaconda3\lib\site packages\joblb\\u parallel\u backends.py(self、n\u jobs、parallel、prefere、require、idle\u worker\u timeout、**memmappingexecutor\u args)
495个n_作业,超时=空闲\u工作者\u超时,
496环境=自我。准备工人环境(n个工作=n个工作),
-->497 context_id=parallel._id,**memmappingexecutor_args)
498自平行=平行
499份返回n_工作
C:\Anaconda3\lib\site packages\joblib\executor.py在get_memmapping_executor中(n_作业,**kwargs)
18
19 def get_memmapping_执行器(n_作业,**kwargs):
--->20返回MemmappingExecutor.get_memmapping_executor(n_作业,**kwargs)
21
22
get_memmapping_executor中的C:\Anaconda3\lib\site packages\joblb\executor.py(cls、n_作业、超时、初始值设定项、initargs、env、临时文件夹、上下文_id、**后端_参数)
40执行者参数=执行者参数
41
--->42管理器=临时资源管理器(临时文件夹)
43
44#还原程序访问要存储临时文件的临时文件夹
C:\Anaconda3\lib\site packages\joblib\\u memmapping\u reducer.py in\uuuuuuu init\uuuuuu(self,temp\u folder\u root,context\u id)
529暴露了太多的低级细节。
530 context_id=uuid4().hex
-->531自身。设置当前上下文(上下文id)
532
533 def设置当前上下文(自身,上下文id):
C:\Anaconda3\lib\site packages\joblib\\u memmapping\u reducer.py在set\u current\u上下文(self,context\u id)中
533 def设置当前上下文(自身,上下文id):
534 self.\u current\u context\u id=context\u id
-->535.注册新上下文(上下文id)
536
537 def寄存器新上下文(自身,上下文id):
C:\Anaconda3\lib\site packages\joblib\\u memmapping\u reducer.py在register\u new\u上下文(self,context\u id)中
558新文件夹名称、自身临时文件夹根目录
559             )
-->560 self.注册文件夹终结器(新文件夹路径、上下文id)
561自缓存临时文件夹[上下文id]=新文件夹路径
562
C:\Anaconda3\lib\site packages\joblib\\u memmapping\u reducer.py在register\u folder\u finalizer(self,pool\u子文件夹,context\u id)中
588#信号灯和管道
589池\模块\名称=哪个模块(删除\文件夹,'删除\文件夹')
-->590资源跟踪程序。注册(池子文件夹,“文件夹”)
591
592 def_cleanup():
寄存器中的C:\Anaconda3\lib\site packages\joblib\externals\loky\backend\resource\u tracker.py(self、name、rtype)
189'''注册命名资源,并增加其引用计数''
190自我保护。确保_运行()
-->191自我发送(“寄存器”、名称、rtype)
192
193 def注销(自我、姓名、rtype):
C:\Anaconda3\lib\site packages\joblib\externals\loky\backend\resource\u tracker.py in\u send(self,cmd,name,rtype)
202
203 def_发送(self、cmd、name、rtype):
-->204 msg='{0}:{1}:{2}\n'.格式(cmd,name,rtype).encode('ascii')
205如果len(名称)>512:
206#posix保证写入到小于pipe#BUF的管道
UnicodeEncodeError:“ascii”编解码器无法对位置18-23中的字符进行编码:序号不在范围内(128)
我试图通过剪切.encode('ascii')来修复_send,但没有帮到我。它使用上述回溯中的变量msg生成另一个错误(需要类似字节的对象,而不是“str”)
我在寻求有关这方面的建议。非常感谢。

尝试使用utf-8编码

msg = '{0}:{1}:{2}\n'.format(cmd, name, rtype).encode('utf-8')
这些消息通常表示您试图将
Unicode字符串
8位字符串
混合,或者试图将Unicode字符串写入仅处理
ASCII
的输出文件或设备

执行此操作时,Python通常会假定8位字符串仅包含ASCII数据,如果不是这样,则会引发错误


在输入时避免这种情况的最好方法是
将所有传入字符串转换为Unicode
,用Unicode进行处理,然后在输出时转换回编码的字节字符串。

尝试将其编码为“utf-8”而不是ASCIIT,这很好!!!!非常感谢。因为我认为解决方法很简单。我多次遇到这个问题,现在都正常工作了,我很高兴