본문 바로가기

전체 글

[Python 3.8] TypeError: 'type' object is not subscriptable 문제점 Python 3.8을 사용중인데 typing을 활용하여 타입에 대한 힌트를 지정할 때 다음과 같은 오류가 발생합니다. Traceback (most recent call last): File "main.py", line 13, in def test(num_list: list[int]) -> list[int]: TypeError: 'type' object is not subscriptable 원인 typing 힌트에서 제너릭에 대한 지원은 Python 3.9부터 시작됩니다. 관련 문서는 PEP 585 (https://peps.python.org/pep-0585/) 에 있습니다. 해결방법 1 Python에 대한 버전업이 가능하다면 3.9 이상으로 올리면 됩니다. 해결방법 2 Python에 대한 버전업이.. 더보기
[Python] 숫자를 문자열로 변경하기 (int to string, float to string) 원하는 것 파이썬에서 숫자를 문자로 변경하고자 합니다. 다른 문자열과 합치거나, 문자열 타입으로 저장해야할 때 필요합니다. 방법 1 str() 함수를 사용합니다. int_str = str(10) # 10 float_str = str(10.0) # 10.0 방법 2 f-string 을 활용합니다. num: int = 10 int_str = f"{num}" # 10 float_num: float = 10.0 float_str= f"{float_num}" # 10.0 방법 3 str.format() 을 활용합니다. num: int = 10 int_str = "{}".format(num) # 10 float_num: float = 10.0 float_str= "{}".format(float_num) # 10.0 더보기
[Python] 문자열을 연산자로 사용하기 원하는 것 문자열로 연산식을 받고 이것에 대한 계산결과를 보고 싶습니다. 예로 "3 + 2" 를 받으면 5이라는 결과를 받고 싶습니다. 해결방법 단순하게 if를 사용해도 eval 을 사용해도 됩니다. 그런데 eval의 경우에는 원하는 용도 이외에도 처리해버리기 때문에 위험합니다. 다른 방법으로 python에서는 operator 라는 패키지를 제공합니다. 이것을 활용하여 연산처리를 진행하면 됩니다. import operator ops = { "+": operator.add, "-": operator.sub, "*": operator.mul, "/": operator.truediv } input = "3 + 2" split_input = input.split(" ") print(ops[input[1]](in.. 더보기
[Docker] python 3.10에서 "RuntimeError: can't start new thread" 발생 환경 Python 3.10.13 Docker 3.18.03.1 문제점 기존 Python 3.8을 사용할 때는 별다른 문제가 없었으나 3.10.12로 Base 이미지를 변경을 하고 코드를 실행하는데 다음과 같이 오류가 발생하였습니다. Traceback (most recent call last): ... File "/usr/local/lib/python3.10/threading.py", line 935, in start _start_new_thread(self._bootstrap, ()) RuntimeError: can't start new thread Thread 생성시 오류가 발생하였습니다. 원인 기존 3.8을 사용할때는 Debian의 버전이 bullseye이었으나 3.10에서 bookworm으로 변경되.. 더보기
[Git] Your 'pull.rebase' configuration may also be set to 'preserve' 문제점 Git에서 rebase 명령을 실행하는데 다음과 같은 오류가 발생합니다. $ git rebase -i -p HEAD~1 fatal: --preserve-merges was replaced by --rebase-merges Note: Your `pull.rebase` configuration may also be set to 'preserve', which is no longer supported; use 'merges' instead $ 원인 옵션으로 -p를 넣을 경우 --preserve-merges 옵션이 적용됩니다. 해당 옵션은 더이상 지원하지 않습니다. 해결방법 -r (--rebase-merges) 옵션으로 변경하여 Rebase를 진행합니다. $ git -i -r HEAD~3 더보기
[Git] 커밋한 사용자(Author) 변경하기 문제점 코드를 수정하고 Commit을 하였는데 Git에 설정된 작성자(Author)가 잘못되었습니다. 기존 Commit의 작성자를 변경하고 다시 Push하려고 합니다. 해결방법 먼저 수정하고자 하는 Commit의 바로 이전 Commit의 Hash값을 확인합니다. 그리고 해당 Commit으로 Rebase 합니다. $ git rebase -i -r hash값 그러면 Commit에 대한 목록수정 화면이 나오며 맨 앞에 pick으로 설정되어있습니다. 이것을 수정하기 위하여 edit로 변경합니다. edit c584719 Commit that I want to change an author # Rebase ca26481..dcd219b onto ca26481 (5 commands) # # Commands: # p,.. 더보기
[Elasticsearch] Anomaly Detection의 by_field, partition_field, over_field 예제 배경 Elasticsearch의 Machine Learning 기능 중 Anomaly Detection이 있습니다. 시계열 데이터에 대한 이상을 탐지하는 기능이며 각각의 분석은 Detector라는 명칭으로 되어있습니다. 설정 항목 중 by_field, partition_field, over_field 차이에 대해 좋은 예제가 있어 공유합니다. 기본 설명 over_field : 모집단 분석시 모집단의 대상을 구분하는 필드를 정의합니다. by_field : soft split으로 해당 필드를 기준으로 집계를 하여 이상탐지를 진행합니다. partition_field : hard split으로 해당 필드를 기준으로 다른 값들과 독립되게 만듭니다. 예제 데이터 사람별 나이, 몸무게, 키에 대한 데이터이며 각 값은.. 더보기
[Machine Learning] Anomaly Detection Job Close(중지) Elastic Machine Learning 중 Anomaly Detection Job을 중지하는 API에 대해 소개합니다. 요청주소 POST 방식의 _ml/anomaly_detectors//_close 입니다. 전제조건 요청을 보내는 계정에 manage_ml 권한(machine_learning_admin 역할에 포함됨)이 있어야 합니다. Close 하기전에 Datafeed가 먼저 중단되어야 합니다. Job ID () 요청주소 중 는 중지할 대상 Job ID이며 다음과 같이 사용할 수 있습니다. 단일 Job ID (예: sample_job) 쉼표로 구분된 Job ID 목록 (예: sample_job1,sample_job2) Job 그룹명 (예: test_group) 와일드카드(*) 표현식 (예: samp.. 더보기