반응형

Python/Debugging 41

파이썬 json 저장 시에 한글이 \uac00처럼 깨져 보일 때 해결 방법

Python에서 json 파일을 저장하는 과정에서 한국어나 한자 등의 문자가 유니코드 형태(\uac00과 같은 형태)로 깨져 보이는 경우가 있습니다. 이런 경우에 글자 원본 그대로 인코딩되도록 변환하는 방법을 간략하게 정리하여 살펴보도록 하겠습니다. json 변환 시 글자가 유니코드로 저장되는 예시 아래 예제 코드와 같이 json.dump 혹은 json.dumps 메서드를 기본 설정으로 사용하여 json 양식을 저장하게되면 아래와 같이 유니코드 형태로 출력이 됩니다. import json data = {'이름': '가나다라마바사'} result = json.dumps(data) print(result) # {"\uc774\ub984": "\uac00\ub098\ub2e4\ub77c\ub9c8\ubc14\..

Python/Debugging 2023.10.15

SyntaxError: 'await' outside function 원인 및 해결법

파이썬에서 asyncio 모듈로 비동기 처리 구현을 하는 과정에서 자주 발생할 수 있는 오류 종류인 SyntaxError: 'await' outside function에 대하여 발생 원인과 해결 방법을 간단하게 요약하여 정리해보도록 하겠습니다. 에러 발생 원인 일반적으로 py 파일을 실행하는 과정에서 다음과 같이 await 구문을 함수 밖 혹은 async 함수가 아닌 일반 함수 안에서 사용하려는 경우에 해당 구문 오류가 발생하게 됩니다. (await 구문은 비동기 함수 내에서만 호출이 가능합니다.) import asyncio await asyncio.sleep(5) # 함수 밖에서 사용 # 또는 def main(): # async가 아닌 일반 함수 내에서 사용 await asyncio.sleep(5) 오..

Python/Debugging 2023.10.09

셀레니움 오류 raise NoSuchElementException: Message: no such element: Unable to locate element 원인 및 해결법

파이썬의 selenium 모듈로 버튼 클릭이나 텍스트 입력 등 과정을 수행하기 위하여 필요한 객체를 찾는 과정에서 NoSuchElementException 에러가 자주 발생할 수 있습니다. 이번 글에서는 해당 오류의 대표 케이스들을 정리해보고 원인 및 해결 방법을 케이스별로 정리해보도록 하겠습니다. 셀레니움에서 일반적으로 name이나 id 등 속성으로 element를 찾는 방법은 아래와 같습니다. from selenium.webdriver.common.by import By a = driver.find_element(By.NAME, 'name_00') # name 속성 기준 탐색 b = driver.find_element(By.ID, 'id_01') # id 속성 기준 탐색 위 형태의 코드를 실행하는 과..

Python/Debugging 2023.09.25

JSONDecodeError: Expecting value: line 2 column 7 (char 8) / Expecting ',' delimiter 원인 및 해결법

Python으로 json 문자열 파싱 과정을 수행할 때 자주 발생하는 오류 케이스인 JSONDecodeError에 대하여 발생 원인과 해결 방법을 간략하게 정리해 보겠습니다. 정상적인 json 파싱 케이스 아래와 같이 정상적인 json 양식으로 저장된 문자열을 가정해 보겠습니다. txt = '{"a" : "123", "b" : {"c" : "456"}}' 이런 정상적인 양식의 문자열의 경우, json 모듈의 loads 메서드를 통하여 쉽게 파싱을 진행할 수 있습니다. import json txt_dict = json.loads(txt) print(txt_dict['b']['c']) # 456 오류 케이스 1: 딕셔너리 규칙이 지켜지지 않은 경우 json에서는 {}로 딕셔너리 자료형 시작과 끝을 표현하고,..

Python/Debugging 2023.09.23

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
반응형