본문 바로가기

오류로그

오류 로그 UnicodeEncodeError: 'ascii' codec can't encode characters in position 18-23: ordinal not in range(128)

320x100

쥬피터 노트북 관련 아나콘다가 설치된 경로

C:\Anaconda3\Lib\site-packages\joblib\externals\loky\backend

에서 resorce_tracker의 'ascii' → 'utf-8'로 수정

 

오늘의 에러 해결을 요약하면 위와 같습니다. 

당연히 바로 수정하기엔 어려울테니, 천천히 한번 보겠습니다.

stackoverflow에 올라온 해결책으로 빠르게 보실 분들은

링크를 보셔도 빠르게 해결할 수 있습니다.

 

에러 해결 참조원본

https://stackoverflow.com/questions/64176343/unicodeencodeerror-ascii-codec-cant-encode-characters-in-position-18-23-ord

 

한글 버전 해결은 아래로🏃‍♀️


gs_model은 이렇게 지정.

gs_model = GridSearchCV(model, parameter, n_jobs=-1, scoring ='f1',
                        cv = 3)
gs_model.fit(X_train, y_train)

 

오늘의 에러 발단은 필자가 쥬피터 노트북을 통해 어떤 csv 데이터로 XGBoostClassifier 모델을 사용하여

분류 문제를 보는 상황이었습니다. 여기서 하이퍼 패러미터를 하려고 GridSearchCV를 사용하는 상황이었습니다.

 

이부분에서 멈추게 되네요.

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)

 

에러 본문

 

위와 같이 장문의 에러가 반환되었습니다.

 

원인은 에러 코드를 살펴봤을때 알 수 있듯이 'ASCII' 코덱을 인코딩할 수 없었기 때문에 중간에

막힌 것으로 추정 됩니다.

 

일단 몇가지 구글링을 해보고, solution을 찾아서 정리했습니다만

결론부터 말하자면 한가지 해결책이 아니라 두 가지 해결책이 뒤섞여 있는 문제입니다.

 

먼저, 아래 경로로 들어갑니다.

필자는 C:에 Anaconda3를 바로 설치했기 때문에 아래 파일 탐색기가 보입니다.

 

C:\Anaconda3\Lib\site-packages\joblib\externals\loky\backend

 

 

보시는 분께서 다른 경로에 설치했다면, 아마 다른 경로로 들어가셔야 할겁니다.

 

 

위 파일 탐색기에서 resource_tracker를 수정해야 합니다.

여기선 죄송하지만 미리 파이썬 실행기가 설치되어 있어야 합니다.

(대부분 설치 됬을것이라 믿습니다)

Download Python | Python.org

 

일단 필자는 EDLE로 열었습니다.

 

 

여기로 들어오시고, 아래 코드를 검색해 주시면 됩니다(ctrl+f)

 

def _send(self, cmd, name, rtype):

 

그럼 아까 봤던 에러와 비슷한 문구가 보입니다!

 

 

좋습니다.

여기서 바로 .encode('utf-8')로 바꿔줍시다.

msg = '{0}:{1}:{2}\n'.format(cmd, name, rtype).encode('utf-8')

 

그리고 저장

 

 

자 어떤가요?

저장이 잘 되면 끝입니다만, 필자는 안타깝게도 다시 오류창이 떴습니다.

 

이제부터 두번째 문제입니다. 아까 언급했었죠?

 

점점 머리가 아파옵니다

 

다시 찾아보니, 파일 경로가 잘못된 상태에서 수정하거나 수정 권한이 없을때,

혹은 \, ₩ 문자가 혼동이 되었을때 반출되는 에러 메시지라고 합니다.

 

직접 검색해보실 분들을 위해 텍스트도 추출했습니다.

 

[Errno 13] Permission denied: 'C:WWAnaconda3WWLibWWsite-packagesWWjoblibWWexternalsWWlo kyWWbackendWWresource_tracker.py'

 

 

좋습니다! 👼

권한이 없다면 권한을 만들어 줍시다!

 

 

IDLE을 관리자 권한으로 실행시켜 줍니다.

 

 

빨리 불러오기 위해서, 일단 해당 파일의 경로를 복사 했었습니다.

 

 

얼마 남지 않았습니다. 아까 실패했던 resource_tracker를 다시 열어줍니다.

 

 

아까 처럼 해당 문자열을 찾아서

 

def _send(self, cmd, name, rtype):

 

encode를 'utf-8'로 바꿔줍니다.

 

 

바로 저장해줍니다.

불안하신 분들은 Save As로 해서, 카피본을 만들어보셔도 됩니다.

 

이제 실행했던 jupyter 를 껐다가 다시 켜줍니다.

 

막혔던 GridSearchCV를 다시 모델링 시작해봅니다.

 

GridSearchCV(cv=3,
             estimator=XGBClassifier(base_score=None, booster=None,
                                     callbacks=None, colsample_bylevel=None,
                                     colsample_bynode=None,
                                     colsample_bytree=None,
                                     early_stopping_rounds=None,
                                     enable_categorical=False, eval_metric=None,
                                     feature_types=None, gamma=None,
                                     gpu_id=None, grow_policy=None,
                                     importance_type=None,
                                     interaction_constraints=None,
                                     learning_rate=None,...
                                     max_cat_threshold=None,
                                     max_cat_to_onehot=None,
                                     max_delta_step=None, max_depth=None,
                                     max_leaves=None, min_child_weight=None,
                                     missing=nan, monotone_constraints=None,
                                     n_estimators=100, n_jobs=None,
                                     num_parallel_tree=None, predictor=None,
                                     random_state=None, ...),
             n_jobs=-1,
             param_grid={'learning_rate': [0.3], 'max_depth': [5],
                         'n_estimators': [200], 'subsample': [0.5]},
             scoring='f1')

좋습니다. 이렇게 해서 에러는 사라졌습니다.

 

2022_12_24

728x90