uxui 직무를 준비하는 취준 기록. 블로그를 꾸미며 연습한 uxui 디자인

[Python] Syntax error : cannot assign to function call 이해하기

코파일럿과 챗지피티에 절여진 요즘, 오랜만에 손으로 직접 코딩을 짜고 있다. 패키지를 긁어와서 목표를 빠르게 이루는게 당연 인생을 사는데 편하겠지만, 난 문제를 그냥 넘어가는 성격은 아니다.

Syntax error : cannot assign to function call

assign to ~ : 보통 이 문구 뒤에는 값들을 저장할 ‘변수’가 위치한다. a = 10 할 때 a.

function call : b = function(parameter) 처럼 왼쪽의 변수 b에 넣을 값으로 오른쪽에서 함수를 불렀다는 행위 자체를 function call 이라 한다.

cannot assign to function call은 말 그대로 ‘난 보통 변수에 값들을 할당하는데, 함수(매개변수)에는 값을 할당할 수 가 없어’라는 뜻이다.

보통 뭔가 이런 구문을 적었기 때문일 것이다.

type(a) = some_function(argument1)

왼쪽에 함수를 적었으니 오른쪽이 뭐가 돼었든 함수를 부르는 행위 자체에 변수를 할당할 수 없다고 한다. 왼쪽은 아무래도 메모리 주소를 대변하는 변수여야 한다.

나의 경우, 리스트 컴프리핸션 column : List[str] = [f for os.isfile(f) in os.listdir(dir)]에서 잘못이 나왔다. [f for f in os.listdir(dir)]이 가장 기본적인 구문이다. 나는 파일만 추가하려고 하는데, 어쨌든 앞부분 f는 어떤 가공을 해도 되는 ‘값’부분이다. a = b에서 b의 역할을 한다.

뒷부분 f는 a = b에서 a처럼 함수가 위치할 수 없다.

for a in os.list(dir): # 뒷부분 a
a # 앞부분 a, 평범한 for문을 떠올려보면 어떤 형태로든 가공이 가능. 당연히 함수도 불러다 써도 좋다.

이런 긴 식의 축약형임을 떠올려보면, 두번째 f에서 함수를 쓴 게 반복이 도는 각 요소를 할당해야 할 위치에 함수를 놔버린 격이 된다. 보통 for i in list(): 라고 하는 그 i 말이다. 따라서 Syntax error : (반복 요소를) cannot assign to function call 이 된다.

물론 에러가 발생했을때 “A”를 적어야 하는데 “A*^#”로 잘못 적어서 생긴 문제구나! 혹은 아 저런 함수가 원래 없는데 써서 그렇구나! 함수 철자를 맞게 쓰자! 해결!이라고 할 수 있다. 워낙 문제가 어렵고, 상황이 소모적이면 나도 그러고 마는 편이다. 하지만 단순 파일 리스트를 읽는 함수를 쓰다가 에러가 난 위의 상황일 경우, 상황과 에러 문구 자체를 이해해볼 시간 여유가 있다. 캬!


Posted

in

by

Tags: