IT/python 48

[python3][vscode][pylance] operator "in" not supported for types literal and str int float 26,12 오류 끄기

기록용으로 남깁니다. vscode 에서 Ctrl + , 키를 눌러 설정 창을 엽니다. Search settings 항목에 pylance를 입력합니다. 어느 영역에 적용할 지에 따라 User, Remote, Workspace 탭을 선택합니다. User는 전역, Remote는 원격 접속시, Workspace 는 현 작업공간에 적용됩니다. 저는 일단 Workspace 를 선택했습니다. 항목을 보면 Python > Analysis: Type Checking Mode 라고 되어 있는 부분이 있습니다. off/basic/strict 의 3가지 값을 고를 수 있는데 이 오류는 off 를 선택해야 나오지 않았습니다. 경고를 끄면 정작 도움이 필요할 때 얻지를 못하니 신중하게 생각하고 결정하시기 바랍니다.

IT/python 2021.06.24

[python] 소켓이 사용중인 포트 확인하기

한개의 소켓을 사용할 때는 당연히 작성자가 포트를 지정했으니 포트값이 지정된 변수를 가져오면 쉽게 알 수 있습니다. 다만, 여러 개의 포트를 열었을 경우 반복문 등을 통해 실행하면 어떤 포트로 들어온 것인지 확인해야 하는 경우가 있습니다. getsockname() 함수를 사용해서 현재 소켓에 bind 된 ip와 포트 정보를 확인할 수 있습니다. import socket import select sockets = [] for port in [555, 777]: server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) server_socket.bind(("0.0.0.0", port)) sockets.append(server_socket) empty ..

IT/python 2021.02.09

[python] json.dumps object of type bytes is not json serializable

기록용으로 남깁니다. dict 자료형으로 패킷 교환을 통해 ipc 를 잘 수행해왔는데 코드를 조금 수정하니 제목처럼 dumps 는 byte 자료형으로는 json 직렬화를 못한다는 오류를 보게 되었습니다. 뭘까 하며 코드를 보다 보니 기존 dict 에 bytes 값을 추가한 것이 눈에 띄었습니다. 감사하게도 순수 이진값이 아니라 base64로 인코딩된 byte 문자열이라서 해당 값을 decode 를 사용해서 문제를 쉽게 해결했습니다.

IT/python 2020.12.22

[python3] smtp 로 여러명에게 이메일 보내기

삽질을 거듭하다가 기록용으로 남깁니다. def smtphandler(self): smtp = None mailconfig = self.config['primaryServer'] if not mailconfig['server'] or not mailconfig['port'] or not mailconfig['uid'] or not mailconfig['pw'] or not mailconfig['sender']: mailconfig = self.config['secondaryServer'] if 'smtp/starttls': smtp = smtplib.SMTP('smtp.gmail.com', 587) elif 'ssl/tls': smtp = smtplib.SMTP_SSL('smtp.gmail.com', 46..

IT/python 2020.12.14

변수 범위 이해가 안감..

아래와 같이 a 값에 따라서 서로 다른 값을 갖는 dict 를 만들고 싶었습니다. def sendAlert(self, a, b, c, d): msg = {} data = {} content = None subject = None if a == 1: content = 'abc' subject = 'test' else: content = 'ddd' subject = 'test2' data['content'] = content data['subject'] = subject print(f'data={data}') 그런데 data = {} 만 나오네요... 같은 scope 일텐데... 이를 해결해보고자 content = 'abc' 바로 위에 global content 라고 넣으면 "content" is assig..

IT/python 2020.11.27

유니코드 문자열을 숫자로 변환했다가 복원하기

문자열을 숫자로 저장했다가 다시 복원하는 방법입니다. 아래 글 내용에 나오는 코드를 고쳐봤습니다. 더보기 바보팀1님의 Hellow 난독화하기 글을 읽었습니다. 저는 python v3.8 환경을 사용하는데 여기에서는 동작하지 않아서 동작하도록 고쳐봤습니다. 버전별로 처리해보기 위해 코드를 문자화 하는데에 샐리님 블로그 글을 참조하였습니다. # 출처: https://qkqhxla1.tistory.com/485 # 참고: https://saelly.tistory.com/171 import sys v2 = """(lambda _, __, ___, ____, _____, ______, _______, ________: getattr( __import__(True.__class__.__name__[_] + []._..

IT/python 2020.10.26

[python]오류 발생시 호출 스택 출력하기

try except로 오류 발생을 처리하다 보면 개발 도중에 자주 오류가 발생할 때 오류 추적이 쉽지 않은 경우가 있습니다. vscode로 실행을 직접 할 수 있는 경우라면 GUI로 편하게 디버깅 가능하지만, vscode 가 지원하지 않는 아키텍처(예를 들면, mips라든지, mips라든지...)인 경우에는 pdb 사용법을 익혀야 되는데 gdb처럼 맘껏 잘 동작하지는 않습니다. import traceback 을 하고 exception 발생했을 때 traceback.format_exc() 값을 출력해주면 됩니다. try: .... except Exception as e: print('ERROR::{}, {}'.format(e, traceback.format_exec())) 작성한지 시간이 지나서(수정 시간..

IT/python 2020.09.28