Python 7

[Python - Error] NameError: ... / AttributeError: ... / __getattr__ raise NameError(attr) - 발생 원인 및 체계적인 디버깅 방법

요약 - __getattr__ 매서드는 클래스로부터 생성된 인스턴스가 attribute(매서드, 함수, 변수 등)를 찾을 수 없을 경우에 호출됩니다. - NameError 역시 요청한 attribute가 존재하지 않는 경우에 발생합니다. - 따라서, 호출하고자 하는 attribute를 아래 표와 같이 살펴봅시다. - 코드 구조나 완결성과 같이 확인하는데 오래걸리고 복잡한 것 부터 의심하지 말고, 아래 표의 우선순위가 높은 것 부터 (빠르게, 확인하는데 리소스가 적게 드는 것부터) 순서대로 확인해 봅시다. 우선 순위 확인 사항 예시 원했던 것 에러 발생 1 오타 여부 np.zeros(5) np.zoros(5) 2 대소문자 구분 np.zeros(5) np.Zeros(5) 3 library의 적절한 impor..

Python 2022.04.13

[Python - Tip] __getattr__ vs. __getattribute__ : 차이 및 활용 예시 (feat. __init__)

요약 - 클래스의 __init__은 훨씬 익숙할 테니 이와 비교해서 설명을 드리면... - __init__ 은 클래스로 부터 인스턴스를 생성할 때, "자동적으로" 실행이 되는 매소드라고 볼 수 있습니다. - __getattr__ 이나, getattribute__ 도 __init__ 과 유사하게 특정 시점에 실행되는 매소드 역할을 하는데, 각각 실행되는 때가 다르다고 보면 되겠습니다. - 프로그램의 특정 동작에서 정보를 가로채서 원하는 다른 동작을 하기 때문에 Hooking (갈고리, 낚시바늘) 이라고 합니다. - 그럼 __getattr__ 이나, getattribute__ 은 언제 실행될까요? 다음과 같이 정리할 수 있겠습니다. 매소드 실행 시점 __init__ 맨 처음 인스턴스를 생성할 때 __geta..

Python 2022.04.13

[Python - How to] 리스트 간 원소 빼기, List A 원소 중 List B에 포함된 원소 빼기

배경 - 어떤 A 라는 리스트에 포함된 원소 중, 다른 리스트 B에 포함된 원소만 빼고 싶을 때, - 즉 집합간 빼기 연산처럼 A에서 A와 B의 교집합을 빼고 싶을 때 사용할 수 있는 방법 - 다음과 같이 ListA (자연수)에서 ListB (홀수)를 빼서 짝수 리스트를 얻으려고 할 때, 리스트간 빼기 연산은 사용 불가 - 지원되지 않는 연산으로 TypeError가 발생 (TypeError: unsupported operand type(s) for -: 'list' and 'list') Python code 1 2 3 4 5 6 ListA = [1,2,3,4,5,6,7,8,9,10] # 자연수 ListB = [1,3,5,7,9] # 홀수 ListC = ListA - ListB # 자연수에서 홀수를 빼서 ..

Python 2020.09.27

[Python - Error] SyntaxError: unexpected EOF while parsing - 코드 구문이 잘못 되었을 때 발생하는 에러

에러 메시지 - SyntaxError: unexpected EOF while parsing - 특히 괄호 짝이 안맞을 경우 에러 메시지에서 어느 지점이 잘못 되었는지 정확히 보여주지 못할 때가 존재 1 2 3 4 File "d:/14-ETC/VisualStudioCode/python/20200901_Test/main.py", line 79 ^ SyntaxError: unexpected EOF while parsing cs 해결 방법 - 괄호 쌍, 따옴표 쌍 등 구문이 알맞게 적혀있는지 확인 - 문제 발생 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import glob import os class PRACTICE: def __init__(self): return ..

Python 2020.09.02

[Python - How to] 지정 경로의 파일/폴더 리스트 얻기 - 파이썬 표준 라이브러리 "os", "glob" 사용

배경 - 위와 같이 지정 경로에 폴더 및 파일이 있는 상태에서, 각 파일/폴더 경로 및 이름 리스트를 얻는 방법 - 파이썬 표준 라이브러리 os, glob 사용 (어떤 기능을 구현하는 방법은 무수히 많음) 방법 Python code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 import glob import os # 경로 path = "D:\\01-PERSONAL\\04-Blog\\*" print() # 파일 폴더 모두 출력 Path_List = glob.glob(path) Name_List = [os.path.basename(x) for x in Path_List] print("P..

Python 2020.09.01

[Python - Error] OSError: [Errno 22] Invalid argument: 파이썬 파일 경로에서 에러가 생길 때

에러 메시지 >> OSError: [Errno 22] Invalid argument: 'C:\\{Location}\\venv\\Project_Management_excel\\Project_Management_excel_2020-08-07_21:56:14.xlsx' 1 2 3 4 5 6 7 8 9 10 11 12 Traceback (most recent call last): File "C:\{Location}/venv/Source/result_to_excel.py", line 145, in book.save(filename) File "C:\{Location}\venv\lib\site-packages\openpyxl\workbook\workbook.py", line 392, in save save_work..

Python 2020.08.07

[Python - Error] SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape - 파이썬 스크립트에서 파일을 찾을 수 없을 때

해결 방법 - 파이썬 스크립트의 파일 경로에 문자를 다음과 같이 변경 / or \ → // or \\ 로 변환 - 예를 들어, (X) filename = "C:\Users\wooan\PycharmProjects\tut\data.xlsx" (O) filename = "C:\\Users\wooan\PycharmProjects\tut\data.xlsx" (O) filename = "C://Users\wooan\PycharmProjects\tut\data.xlsx" 원인 - 예를 들어, 파이썬 스크립트에서 실행하고자 하는 파일이 다음과 같다면, filename = "C:\Users\wooan\PycharmProjects\tut\data.xlsx" - \U 는 '\U00014321'과 같은 유니코드 이스케이프를 시작

Python 2020.07.12