TypeError : 'module'개체를 호출 할 수 없습니다
File "C:\Users\Administrator\Documents\Mibot\oops\blinkserv.py", line 82, in __init__
self.serv = socket(AF_INET,SOCK_STREAM)
TypeError: 'module' object is not callable
이 오류가 발생하는 이유는 무엇입니까? 혼란 스러워요.
내 질문에 대답하려면 무엇을 알아야합니까?
socket
클래스를 포함하는 모듈 socket
입니다.
당신은해야 socket.socket(...)
하거나 from socket import socket
:
>>> import socket
>>> socket
<module 'socket' from 'C:\Python27\lib\socket.pyc'>
>>> socket.socket
<class 'socket._socketobject'>
>>>
>>> from socket import socket
>>> socket
<class 'socket._socketobject'>
여기의 오류는 이해하기 매우 쉽습니다. if이면 module object is not callable
아마도 모듈 객체를 호출하는 것입니다! 모듈 객체 란 무엇입니까? 모듈을 가져올 때 얻는 유형입니다.
그러나 이해하지 못하는 경우에도 (클래스, 모듈, 함수 등이 모두 다른 것과 같은 객체라는 것을 혼동하는 경우가 많습니다) 디버깅을 시작하는 매우 쉬운 방법이 있습니다.
- "음,
module object is not callable
. 전화 할 수없는 것을 부르려고하는 것 같습니다. 무엇을 부르려고하는지 궁금합니다." - "아, 나는 전화하고있다
socket
. 그것은 호출 가능해야한다! 변수socket
가 그것이 내가 생각하는 것인지 궁금하다 . ' print socket
YourClass.py 의 내용이 다음 과 같다고 가정하십시오 .
class YourClass:
# ......
사용하는 경우 :
from YourClassParentDir import YourClass # means YourClass.py
이런 식으로 TypeError : 'module'객체를 호출 할 수 없으면 호출 할 수 없습니다YourClass()
.
그러나 다음을 사용하는 경우 :
from YourClassParentDir.YourClass import YourClass # means Class YourClass
또는 사용 YourClass.YourClass()
하면 나를 위해 작동합니다.
__init__.py
YourClassParentDir 의 메인 에 추가하십시오 . 예 :
from .YourClass import YourClass
그런 다음 다른 스크립트로 가져올 때 클래스 인스턴스를 준비합니다.
from YourClassParentDir import YourClass
이 게시물을 읽은 후에도 잠시 시간이 걸리는 또 다른 문제가 있습니다. 파이썬 빈 스크립트를 호출하는 스크립트를 설정하고있었습니다. 모듈을 호출 할 수 없게되었습니다.
내 지그는 내가 다음을하고 있다는 것이었다.
from mypackage.bin import myscript
...
myscript(...)
내 zag가 다음을 수행해야 할 때 :
from mypackage.bin.myscript import myscript
...
myscript(...)
요약하면 패키지 및 모듈 중첩을 다시 확인하십시오.
내가하려고하는 것은 * .py 확장자가없는 스크립트 디렉토리를 가지고 있으며 mypackage / bin에 'bin'모듈이 있고 내 * .py 확장자가 있습니다. 나는 포장에 익숙하지 않으며 표준을 해석하면서 표준을 따르려고합니다. 그래서 나는 설정 루트에 있습니다 :
setup.py
scripts/
script1
mypackage/
bin/
script1.py
subpackage1/
subpackage_etc/
이것이 표준을 준수하지 않는 경우 알려주십시오.
당신이 한 일을로 socket
모듈을 가져온 것 같습니다 import socket
. 따라서 socket
모듈입니다. 모듈을 self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
사용할 때마다 해당 줄을 로 socket
변경하거나 import 문을로 변경해야합니다 from socket import socket
.
또는 당신은 import socket
후를 가지고 있습니다 from socket import *
:
>>> from socket import *
>>> serv = socket(AF_INET,SOCK_STREAM)
>>> import socket
>>> serv = socket(AF_INET,SOCK_STREAM)
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: 'module' object is not callable
나는이 스레드가 1 년 된 것을 알고 있지만 실제 문제는 작업 디렉토리에 있습니다.
작업 디렉토리는 C:\Users\Administrator\Documents\Mibot\oops\
입니다. socket.py
이 디렉토리에 이름 이 지정된 파일을 확인하십시오 . 찾으면 이름을 바꾸거나 이동하십시오. 소켓을 가져올 때 Python의 디렉토리 socket.py
대신 현재 디렉토리에서 사용됩니다 socket.py
. 이것이 도움이 되었기를 바랍니다. :)
참고 : Python의 디렉토리에서 파일 이름을 사용하여 프로그램의 파일 이름을 저장하지 마십시오. 프로그램과 충돌합니다.
이 문제를 해결하는 간단한 방법은 PYTHONPATH
변수 환경을 내보내는 것 입니다. 예를 들어, 데비안 / GNU Linux의 Python 2.6 :
export PYTHONPATH=/usr/lib/python2.6`
다른 운영 체제에서는 먼저이 모듈 또는 socket.py
파일 의 위치를 찾습니다 .
setup.py에서 console_scripts 진입 점을 구성 할 때이 문제는 엔드 포인트가 모듈 내의 함수가 아닌 모듈 또는 패키지 일 때 발생했습니다.
Traceback (most recent call last):
File "/Users/ubuntu/.virtualenvs/virtualenv/bin/mycli", line 11, in <module>
load_entry_point('my-package', 'console_scripts', 'mycli')()
TypeError: 'module' object is not callable
예를 들어
from setuptools import setup
setup (
# ...
entry_points = {
'console_scripts': [mycli=package.module.submodule]
},
# ...
)
그랬어 야 했어
from setuptools import setup
setup (
# ...
entry_points = {
'console_scripts': [mycli=package.module.submodule:main]
},
# ...
)
따라서 모듈 자체가 아닌 호출 가능한 함수를 참조합니다. 모듈에 if __name__ == '__main__':
블록 이 있으면 아무런 차이가없는 것 같습니다 . 이렇게하면 모듈을 호출 할 수 없습니다.
전역 변수 "module"을 설정하여 내장 함수 / 변수 또는 다른 "모듈"을 재정의 한 것 같습니다. 모듈을 인쇄하기 만하면됩니다.
참고 URL : https://stackoverflow.com/questions/4534438/typeerror-module-object-is-not-callable
'development' 카테고리의 다른 글
CSS 파일에서 상대 URL을 사용하면 상대 위치는 무엇입니까? (0) | 2020.02.14 |
---|---|
JavaScript 함수에서 전역 변수 정의 (0) | 2020.02.14 |
팩토리와 추상 팩토리 디자인 패턴의 기본 차이점은 무엇입니까? (0) | 2020.02.14 |
Node.js에서 스택 추적을 인쇄하는 방법은 무엇입니까? (0) | 2020.02.14 |
Visual Studio“Any CPU”대상은 무엇을 의미합니까? (0) | 2020.02.14 |