반응형

Python/Debugging 37

UnicodeEncodeError: 'cp949' codec can't encode character 원인 / 해결 방법

오류 개요 파이썬에서 txt나 json 파일을 read/write 하는 과정에서 다음과 같은 오류가 발생하였습니다. UnicodeDecodeError: 'cp949' codec can't decode byte 0xec in position 122: illegal multibyte sequence 참고로, 해당 코드는 리눅스 체제에서는 정상 작동되었는데, 에러가 발생한 운영체제 환경은 윈도우였고, 한국어 세팅이었습니다. 오류 원인 한국어 환경에서의 인코딩은 'cp949'로 지정이 된 경우가 많은데, 유니코드('utf-8') 등 다른 인코딩 방법으로 인코딩된 파일을 다루는 경우, 인코딩 버전 불일치로 인하여 해당 에러가 발생할 수 있습니다. 오류 해결법 파일을 다루는 과정에서 encoding 방법을 명시적으..

Python/Debugging 2023.09.19

onnxruntime GPU 인식이 안되는 경우 해결 방법

문제 개요 onnx 파일로 저장된 모델을 사용하기 위하여 onnxruntime 모듈을 활용할 때, 아래 코드와 같이 CUDA GPU를 사용하도록 지정하였음에도 GPU 인식이 안되어 강제로 CPU만 사용되는 경우가 나타날 수 있습니다. import onnxruntime onnx_session = onnxruntime.InferenceSession("model.onnx", providers=['CUDAExecutionProvider']) 이런 경우에는 GPU 사용이 불가능한 경우를 안내하기 위하여 다음과 같은 warning 메시지가 출력되기도 합니다. UserWarning: Specified provider 'CUDAExecutionProvider' is not in available provider nam..

Python/Debugging 2023.09.16

TypeError: 'str' object does not support item assignment 해결법

개요 다음과 같은 문자열 a가 있다고 가정해보겠습니다. a = 'abcde' a의 3번 인덱스 위치의 'd'를 'g'로 바꾸려고 시도해보려는데, 다음과 같이 에러가 발생하였습니다. a[3] = 'g' # TypeError: 'str' object does not support item assignment 원인 자료형 종류에는 수정이 가능한 객체인 mutable 타입(리스트, 딕셔너리 등)이 있고, 수정이 불가능한 객체인 immutable 타입(튜플, 문자열 등)이 있는데 문자열은 immutable 자료형이라서 위와 같이 인덱싱(혹은 슬라이싱)을 통한 값 수정이 불가능한 것입니다. 해결 방법 1. 문자열 수동 할당 문자열 덧셈 연산으로 이어 붙이기가 되는 점을 이용하여 재할당을 해주는 방법입니다. 다만, ..

Python/Debugging 2022.10.26

UFuncTypeError: Cannot cast ufunc 'add' output from dtype('float64') to dtype('int64') with casting rule 'same_kind' 해결법

오류 개요 두 넘파이 배열 a와 b에 대하여 a에 b를 더한 결과를 얻으려는 과정에서 아래와 같은 에러가 발생하였습니다. import numpy as np a = np.array([[1, 2], [3, 4]]) b = np.array([[5.0, 6.0], [7.0, 8.0]]) a += b # UFuncTypeError: Cannot cast ufunc 'add' output from dtype('float64') to dtype('int64') with casting rule 'same_kind' 오류 원인 위 예시에서 a는 정수형, b는 실수형 자료로 구성된 배열인데 += 연산을 수행하는 과정에서 서로 다른 자료형 배열 간의 casting이 unsafe하기 때문입니다. 해결 방법 1. 두 배열 자료..

Python/Debugging 2022.10.23

TypeError: argument of type 'int' is not iterable 원인, 해결법

개요 숫자 5가 주어진 정수 내에 포함되어 있는지 판단하기 위하여 아래와 같은 조건문을 작성했다고 가정해보도록 하겠습니다. a = 135 if 5 in a: print('5가 포함되어 있습니다.') # 결과 TypeError: argument of type 'int' is not iterable 원인 인덱싱이 가능한 리스트, 문자열 등 자료형이나 원소를 순회할 수 있는 generator 자료형과 같은 경우는 in 구문으로 원소 포함 여부를 체크할 수 있지만, 정수, 실수 등과 같은 자료형은 순회하면서 "2번째로 오는 값이 무엇인가?" 등을 정의할 수 있는 자료형이 아니기에 in 구문으로 원소 포함 여부를 체크할 수 없어서 나타나는 오류입니다. 해결법 포함 여부를 in 구문으로 찾고 싶다면 문자열 등 순회..

Python/Debugging 2022.09.22

RuntimeError: The expanded size of the tensor (1002) must match the existing size (512) at non-singleton dimension 1. Target sizes: [8, 1002]. Tensor sizes: [1, 512] 해결

Transformers token size error debugging transformers 모듈로 모델 학습 과정 중 너무 긴 토큰 사이즈로 인해 발생가능한 에러를 고치는 방법에 대하여 간략하게 다루어보도록 하겠습니다. 오류 원인 trainer로 bert 모델을 학습하는 과정 도중 학습이 잘 진행되다가 중간에 특정 데이터에 도달했을 때, 다음과 같은 오류 메시지가 발생하였습니다. (batch size = 8이었으며, batch 내 문제가 되는 데이터가 포함된 것으로 보입니다.) trainer.train() # RuntimeError: The expanded size of the tensor (1002) must match the existing size (512) at non-singleton dim..

Python/Debugging 2022.08.26

TypeError: Object of type int64 is not JSON serializable 해결

JSON 관련 TypeError 디버깅(return 값 인식 오류) 프로그래머스 등의 코딩 테스트 연습 사이트에서의 답안 제출 과정과 같이 return 결과를 다른 곳에 보낼 때 발생할 수 있는 TypeError 종류에 대한 원인과 해결법을 살펴보도록 하겠습니다. 오류 상황 예시 및 원인 예를 들어, 두 정수 리스트 간의 내적값을 구하는 문제에 대하여 아래처럼 답안을 제출한 경우 return되는 값은 분명히 정답으로 제출되는 듯 하지만 아래와 같은 에러가 발생합니다. (에러 메시지 : TypeError: Object of type int64 is not JSON serializable) 예상되는 원인으로는 np.dot 함수의 출력 결과는 numpy.int64 자료형인데 기본 int 자료형과는 다르게 해당..

Python/Debugging 2022.08.07

RuntimeError: expected scalar type Long but found Float / RuntimeError: "log_softmax_lastdim_kernel_impl" not implemented for 'Long' 해결

파이토치 자료형 관련 오류 디버깅 Pytorch 사용 중 자료형 타입과 관련하여 발생할 수 있는 에러 종류 2가지에 대하여 원인 및 해결법을 간단히 정리해보도록 하겠습니다. 1. RuntimeError: expected scalar type Long but found Float 해당 오류는 정수형 타입 중 하나인 long 타입으로 구현되어야 하는 함수에게 float와 같이 다른 자료형의 텐서가 주어질 때 발생할 수 있는 오류입니다. 예를 들어, 다음과 같이 nn.CrossEntropyLoss 함수를 적용하는 간단한 상황을 살펴보겠습니다. import torch import torch.nn as nn X = torch.tensor([[1, 2, 0], [1, 0, 1]]).float() # 데이터 부분 :..

Python/Debugging 2022.07.23

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 해결법

if문 넘파이 배열 비교 연산자 ValueError 디버깅 비교문에서 numpy array 등 자료형에 대한 ==, != 연산 적용 시 등장할 수 있는 "ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()" 오류에 대하여 원인과 해결 방안을 다루어보도록 하겠습니다. (참고 : 판다스 시리즈 등 자료형에서도 비슷한 종류의 오류 발생이 가능합니다.) 에러 원인 아래는 두 넘파이 배열이 같은지를 if문 내에서 비교하려는 예시입니다. import numpy as np a = np.array([1, 2, 3, 4]) b = np.array([1, 2, 3, 4]) if a == b..

Python/Debugging 2022.07.14

Python Pandas에서 발생하는 KeyError: 0 해결법

파이썬 판다스 KeyError: 0 오류 디버깅 파이썬의 pandas 모듈에서 인덱싱 과정에서 발생하기 쉬운 KeyError 종류에 대하여 예상 원인과 이에 대한 해결법을 다루어보도록 하겠습니다. Case 1 : 열 이름 위치에 인덱스 번호를 대신 입력하는 경우 -> loc 함수 사용 아래와 같은 데이터프레임 df에 대하여 0번 인덱스 행을 가져오는 상황을 가정하겠습니다. 여기서 다음과 같이 인덱싱을 시도하면 KeyError: 0이 발생하게 됩니다. df[0] # KeyError: 0 발생 # 가능한 경우(열 이름만 가능) df['A'] df['B'] 이는 컬럼 이름이 들어가야할 자리에 인덱스 번호가 대신 들어간 상태이고, 0이라는 이름을 가진 열은 존재하지 않기에 해당 에러가 발생한 것입니다. 여기서는..

Python/Debugging 2022.06.14
반응형