Python 모듈은 특히 자신의 모듈을 정의할 때 혼란스럽습니다. "TypeError:'module' object is not callable"은 파이썬 개발자가 클래스로 작업할 때 저지르는 가장 흔한 실수 중 하나입니다.
이 가이드에서는 이 오류의 의미와 발생 이유에 대해 설명합니다. 이 오류를 극복하는 데 도움이 되는 예제 코드 조각을 살펴봅니다. 시작하겠습니다!
문제:TypeError:'module' 개체를 호출할 수 없습니다.
모든 Python 파일은 ".py" 확장자로 끝나는 한 모듈입니다.
모듈은 기본 프로그램 외부에서 함수, 변수 및 클래스를 정의할 수 있도록 해주기 때문에 Python의 중요한 부분입니다. 즉, 코드를 여러 파일로 나누고 더 효과적으로 분류할 수 있습니다.
모듈은 특정 방식으로 가져와야 합니다. 그렇지 않으면 파이썬은 오류를 반환합니다:
TypeError: 'module' object is not callable
이것은 모듈을 함수로 가져오려고 할 때 발생합니다.
예시 시나리오
"케이크"라는 모듈을 정의합니다. 이 모듈에는 하나의 함수인 read_file이 포함되어 있습니다. read_file 함수는 텍스트 파일의 내용을 읽습니다.
파일 이름은 모듈의 이름을 결정합니다. 모듈을 "케이크"라고 부르기를 원하기 때문에 코드를 cake.py라는 파일에 작성합니다.
참가자의 81%는 부트캠프에 참석한 후 기술 직업 전망에 대해 더 자신감을 느꼈다고 말했습니다. 지금 부트캠프에 참여하십시오.
부트캠프 졸업생은 부트캠프 시작부터 첫 직장을 찾는 데까지 6개월도 채 걸리지 않았습니다.
def read_file(): all_cakes = [] with open("cakes.txt", "r") as cake_file: cake_list = cake_file.readlines() for c in cake_list: all_cakes.append(c.replace("\n", "")) return all_cakes
이 함수는 "cakes.txt"라는 파일의 내용을 읽습니다. 그런 다음 파일의 모든 텍스트 줄을 반복하고 각 줄을 "all_cakes"라는 목록에 추가합니다.
replace() 메서드는 줄 바꿈("\n") 문자를 빈 값으로 바꾸는 데 사용됩니다. 모든 새 줄을 제거합니다. 함수의 끝에 "all_cakes"를 반환합니다.
이제 app.py라는 파일을 열고 다음 코드를 붙여넣습니다.
import cakes cake_list = cakes() print(cake_list)
이 코드는 "cakes.txt" 파일의 내용을 읽기 위해 "cakes" 모듈을 사용합니다. 그런 다음 함수가 파일에서 찾은 모든 케이크를 인쇄합니다.
코드를 실행해 보겠습니다.
Traceback (most recent call last): File "main.py", line 3, in <module> cakes = cakes() TypeError: 'module' object is not callable
코드가 오류를 반환합니다.
해결책
app.py 파일의 import 문을 살펴보겠습니다.
import cakes
"cakes" 모듈을 가져옵니다. 여기에는 "cakes.py" 파일에서 선언한 모든 변수, 클래스 및 함수가 포함됩니다.
이제 다음 코드 줄을 살펴보겠습니다.
cake_list = cakes()
"케이크" 모듈에는 하나의 기능만 포함되어 있지만 그 기능이 무엇인지 지정하지 않습니다. 이것은 파이썬이 어떤 기능과 함께 작동해야 하는지 모르기 때문에 혼란스럽습니다.
이 오류를 해결하기 위해 모듈 자체 대신 참조하려는 함수의 이름을 호출합니다.
import cakes cake_list = cakes.read_file() print(cake_list)
코드를 다시 실행해 보겠습니다.
['Cinnamon Babka', 'Chocolate Cupcake']
우리 코드는 케이크 목록을 성공적으로 반환합니다.
app.py 파일에서 cakes.read_file()을 호출합니다.
Python은 "cakes" 모듈이 저장된 "cakes.py" 파일을 보고 read_file()
을 찾습니다. 함수. 그런 다음 Python은 해당 기능을 실행합니다.
read_file()
의 결과를 할당합니다. "cake_list"라는 변수에 함수를 추가합니다. 그런 다음 해당 목록을 콘솔에 인쇄합니다.
또는 read_file 함수를 프로그램으로 직접 가져옵니다.
from cakes import read_file cake_list = read_file() print(cake_list)
코드는 다음을 반환합니다.
['Cinnamon Babka', 'Chocolate Cupcake']
우리 코드는 read_file()
을 실행합니다. "cakes" 모듈의 기능. 이 예에서는 전체 "cakes" 모듈을 가져옵니다. 그렇게 하는 대신 "cakes" 모듈에서 하나의 함수인 read_file을 가져옵니다.
read_file을 가져올 때 더 이상 cakes.read_file()
을 사용할 필요가 없습니다. 우리의 함수를 호출합니다. read_file()
을 사용합니다. read_file()
을 가져오기 때문에 우리 코드에 직접 기능합니다.
결론
Python 모듈에 대한 코드가 다른 파일에 있습니다. 모듈에서 함수와 값을 가져오는 몇 가지 다른 방법이 있으며 엉망이 되기 쉽습니다.
모듈로 작업할 때 올바르게 액세스하려는 함수, 클래스 및 변수를 참조해야 합니다. 모듈 자체를 호출하는 대신 함수를 참조하려면 모듈에서 호출하려는 정확한 함수를 지정해야 합니다.
이제 전문 개발자처럼 이 Python TypeError를 해결할 준비가 되었습니다!