Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python TypeError:'module' 객체를 호출할 수 없습니다.

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를 해결할 준비가 되었습니다!