Microsoft MVP성태의 닷넷 이야기
오류 유형: 839. python - TypeError: '...' object is not callable [링크 복사], [링크+제목 복사],
조회: 12931
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

python - TypeError: '...' object is not callable

무심코, 다음과 같이 코드를 작성했는데,

import sys
len = 147

if len(sys.argv) >= 2:
    len = int(sys.argv[1])

실행 시 이런 오류가 발생합니다.

$ python3 test.py 130
Traceback (most recent call last):
  File "test.py", line 6, in <module>
    if len(sys.argv) >= 2:
TypeError: 'int' object is not callable

이상하군요, 분명히 len 내장 함수는 sys.argv 목록에 대해 요소 수를 반환할 텐데 예외가 발생하는 것입니다. 눈썰미 좋으신 분들은 벌써 아셨겠지만 ^^ 바로 위에 정의한,

len = 147

코드 때문입니다. 저 코드로 인해 len 내장함수는 더 이상 함수가 아닌 변수로 인식되기 때문에 len(sys.argv) 코드가 변수에 대한 호출처럼 바뀐 것입니다.

어찌 보면 저런 것은 "len = 147"이라는 코드 수행 시 오류를 발생시켜 주면 좋지 않을까 싶은데요, 대개의 언어들이 식별자로 부적합한 기준을 (내장 함수가 아닌) 예약어(reserved keywords)에 한해 적용하기 때문에 파이썬의 이런 처리가 타당한 것은 맞습니다.

단지, 파이썬 언어 자체가 그다지 많은 예약어를 갖고 있지 않다는 것이 문제인데요,

Reserved Keywords
; https://realpython.com/lessons/reserved-keywords/

// 파이썬 3.6 기준
False	def	if	raise
None	del	import	return
True	elif	in	try
and	else	is	while
as	except	lambda	with
assert	finally	nonlocal	yield
break	for	not	
class	from	or	
continue	global	pass

이로 인해 다른 언어 개발자들은 예약어로 알고 있는 int 조차도 파이썬에서는 내장 함수이므로 식별자로 사용하는 것이 가능해 재수가 없다면 ^^ 이런 오류를 만나게 될 것입니다.

int = 5
print(int)
number = int('6')
print(number)

/* 오류
Traceback (most recent call last):
  File "test.py", line 7, in <module>
    number = int('6')
TypeError: 'int' object is not callable
*/




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 1/27/2023]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 166  167  [168]  169  170  171  172  173  174  175  176  177  178  179  180  ...
NoWriterDateCnt.TitleFile(s)
907정성태8/14/201024520개발 환경 구성: 81. Windows Virtual PC의 네트워크 유형 (2)
906정성태8/13/201032412개발 환경 구성: 80. Windows Virtual PC의 네트워크 유형 (1)
905정성태8/8/201036095Team Foundation Server: 39. 배치 파일로 팀 빌드 구성 [2]파일 다운로드1
904정성태8/8/201038501오류 유형: 101. SignTool Error: No certificates were found that met all the given criteria. [2]
903정성태8/6/201035413Team Foundation Server: 38. TFS 소스 코드 관리 기능 (4) - Branch
902정성태8/5/201027728Team Foundation Server: 37. TFS 2010의 소스 서버 수작업 구성
901정성태8/4/201026915Team Foundation Server: 36. TFS 소스 코드 관리 기능 (3) - Label
900정성태8/3/201029825Team Foundation Server: 35. TFS 소스 코드 관리 기능 (2) - Shelveset
899정성태8/2/201031528Team Foundation Server: 34. TFS 소스 코드 관리 기능 (1) - Changeset
898정성태7/31/201031521.NET Framework: 182. WCF의 InactivityTimeout [1]파일 다운로드1
897정성태7/26/201132642.NET Framework: 181. AssemblyVersion, AssemblyFileVersion, AssemblyInformationalVersion [4]
896정성태7/25/201039844.NET Framework: 180. C# Singleton 인스턴스 생성 [2]
895정성태7/25/201023204VS.NET IDE: 68. Visual Studio 2010 - .NET 1.1 원격 디버깅
894정성태7/25/201029200오류 유형: 100. Could not find the Database Engine startup handle. [1]
893정성태7/25/201030232오류 유형: 99. .NET 4.0 설치된 윈도우 7에서 SQL Server 2008 R2 설치 오류
892정성태7/9/201031574오류 유형: 98. 영문 윈도우에 한글 SQL Server 2008 R2 설치할 때 오류 [4]
891정성태7/8/201027710오류 유형: 97. MsiGetProductInfo failed to retrieve ProductVersion for package with Product Code = '{...}'. Error code: 1605. [2]
889정성태7/5/201029577.NET Framework: 179. Dictionary.Get(A) 대신 Dictionary.Get(A.GetHashCode())를 사용해서는 안 되는 이유 [1]
888정성태6/30/201027204오류 유형: 96. Hyper-V 연결 오류 - A connection will not be made because credentials may not be sent to the remote computer
887정성태6/23/201037130개발 환경 구성: 79. Hyper-V의 가상 머신에서 소리 재생 방법 [2]
886정성태6/23/201024984제니퍼 .NET: 14. ASMX, WCF 호출 모니터링 및 누수 확인
885정성태6/20/201026924개발 환경 구성: 78. COM+ 서버에서 COM+ 서버를 호출하는 방법
884정성태6/20/201029633제니퍼 .NET: 13. COM+ 서버 모니터링 [2]
883정성태6/18/201031834개발 환경 구성: 77. Appinit_Dlls로 구현한 환경 변수 설정 DLL [5]파일 다운로드1
882정성태6/17/201034620개발 환경 구성: 76. JKS(Java Key Store)에 저장된 인증서를 ActiveX 코드 서명에 사용하는 방법 [1]
881정성태6/14/201023787제니퍼 .NET: 12. COM+ 호출 모니터링 및 누수 확인
... 166  167  [168]  169  170  171  172  173  174  175  176  177  178  179  180  ...