스택큐힙리스트
파이썬 3 : UnboundLocalError : 할당하기 전에 지역 변수가 참조되었습니다 [중복] 본문
이 질문에 대한 답변은 이미 여기 있습니다 :
UnboundLocalError trying to use a variable (supposed to be global) that is (re)assigned (even after first use)
1. Hello - 안녕하세요.
2. Goodbye - 안녕히 가세요.
3. Yes - 네/예.
4. No - 아니오.
5. Thank you - 감사합니다.
6. You're welcome - 천만에요.
7. Please - 부탁합니다.
8. Excuse me - 실례합니다.
9. I'm sorry - 죄송합니다.
10. How are you? - 어떻게 지내세요?
11. What is your name? - 이름이 뭐에요?
12. Where are you from? - 어디서 왔어요?
13. What time is it? - 몇 시예요?
14. I love you - 사랑해요.
Using global variables in a function
1. 안녕하세요. (annyeonghaseyo)
2. 감사합니다. (kamsahamnida)
3. 미안합니다. (mianhamnida)
4. 좋아요. (johayo)
5. 싫어요. (silheoyo)
6. 이거 뭐예요? (igeo mwoyeyo?)
7. 어디에 가세요? (eodie gaseyo?)
8. 몇 시에 만나요? (myeot sie mannayo?)
9. 얼마에요? (eolmayeyo?)
10. 제 이름은 ___ 입니다. (je ireum-eun ___ imnida.)
11. 좀 더 늦게 올게요. (jom deo neutge olgeyo.)
12. 네, 그렇습니다. (ne, geuleohseubnida.)
13. 아니요, 아닙니다. (aniyo, anibnida.)
14. 다른 거 있나요? (dareun geo innayo?)
15. 이거 사고 싶어요. (igeo sago shipeoyo.)
16. 이용 가능한가요? (iyong ganeunghangayo?)
17. 죄송합니다. 늦었습니다. (joesonghamnida. neut-eossseubnida.)
18. 좋은 아침입니다. (joeun achim-imnida.)
19. 네, 알겠습니다. (ne, alkessseubnida.)
20. 아직 먹지 않았어요. (ajik meogji anhasseoyo.)
21. 밖이 춥네요. (bak-i chupneyo.)
22. 이것 좀 빌려 줄 수 있나요? (igeos jom billyeo jul su innayo?)
23. 건강하세요. (geonganghaseyo.)
24. 그럴게요. (geuleolgeyo.)
25. 다음에 봅시다. (da-eum-e boptshida.)
7년 전에 종료되었습니다.
다음 코드는 오류 UnboundLocalError: local variable 'Var1' referenced before assignment을 발생시킵니다:
Var1 = 1
Var2 = 0
def function():
if Var2 == 0 and Var1 > 0:
print(Result One)
elif Var2 == 1 and Var1 > 0:
print(Result Two)
elif Var1 < 1:
print(Result Three)
Var1 =- 1
function()
이것을 어떻게 고칠 수 있을까요?
답변 1
이는 함수 내부에서 이름 Var1에 대한 할당 문도 사용하기 때문입니다. 이렇게 되면 함수 범위 내에서 변수 Var1가 생성됩니다. (사실 or 또는 will는 기존 변수를 업데이트(재할당)할 뿐입니다. 그러나 (이러한 문맥에서의 일관성을 유지하기 위해) 파이썬은 이를 할당으로 처리합니다.) 파이썬 인터프리터는 이를 모듈 로드 시간에 감지하여, 전역 범위 내에서 Var1를 로컬 범위 내에서 사용하지 않도록 결정합니다. 이로 인해 로컬로 할당되기 전에 변수를 참조하려고 할 때 문제가 발생합니다.
전역 변수를 필요 이상으로 사용하는 것은 일반적으로 Python 개발자들에게 비난 받는 실수입니다. 왜냐하면 이는 혼란스럽고 문제가 될 가능성이 있기 때문입니다. 그러나 코드를 작성하는 데 필요한 작업을 수행하기 위해 전역 변수를 사용하고 싶다면, 함수의 상단에 간단히 추가할 수 있습니다.
global Var1, Var2
이렇게 하면 Python이 해당 함수의 로컬 스코프에서 Var1 또는 Var2 변수를 정의하지 않겠다는 것을 알게됩니다. Python 인터프리터는 이를 모듈 로드 시간에 볼 수 있으며, 상기 변수에 대한 어떠한 참조도 전역 스코프에서 찾도록 올바르게 결정합니다.
일부 자원
파이썬 웹사이트에는 이 공통적인 문제를 위한 great explanation이 있습니다.
파이썬 3은 관련된 nonlocal 문장도 제공합니다 - 이에 대해서도 확인해보십시오.
답변 2
Python 3: UnboundLocalError: 변수 할당 전에 지역 변수가 참조됨 [중복]파이썬 3는 매우 유용하고 인기있는 프로그래밍 언어입니다. 그러나 때때로 프로그래머들은 코드 작성 중에 UnboundLocalError 오류를 마주합니다. 이 문제는 로컬 변수가 아직 정의되지 않았지만 이전에 참조될 때 발생합니다. 이 문제는 파이썬에 익숙하지 않은 프로그래머들에게 혼란을 줄 수 있습니다.
이 오류 메시지는 파이썬이 로컬 변수를 참조하기 전에 할당하지 않은 것으로 인식하는 경우에 발생합니다. 이는 변수에 값을 할당하기 전에 변수를 참조하려고 할 때 발생할 수 있습니다. 따라서 변수를 할당하거나 global 키워드를 사용하여 변수를 전역 변수로 만들어서 이 문제를 해결할 수 있습니다.
또 다른 해결책은 변수를 함수 인수로 전달하는 것입니다. 이렇게 하면 변수가 지역 변수가 아니라 함수의 인수로 사용되므로 이 문제가 해결됩니다. 로컬 변수를 함수에 전달하는 것은 전적으로 개발자의 선택에 따라 달라집니다.
일부 프로그래머들은 이 오류를 해결하는 방법으로 함수에서 변수를 반환하는 것을 선호합니다. 이렇게 하면 반환된 값이 전역 변수로 사용될 수 있으므로 이 문제가 해결됩니다.
결론적으로, UnboundLocalError 문제는 파이썬 개발자들이 자주 마주치는 문제 중 하나이며, 변수가 할당되기 전에 로컬 변수가 참조되면 발생합니다. 이 문제를 해결하기 위해 함수에서 전역 변수를 사용하거나 함수 인수를 사용하여 변수를 전달하는 것이 좋습니다. 이 문제를 이해하고 해결하는 것은 파이썬을 더 효율적으로 사용하는 데 큰 도움이 될 것입니다.