240510 Today I Learn
๐พ UnboundLocalError: local variable referenced before assignment
ํจ์ ๋ฐ์์ ์ ์ธํ ๋ณ์(Global Variable)๋ฅผ ํจ์ ๋ด(Local Variable)์์ ์ฌ์ฉ/๋ณ๊ฒฝ ํ์ ๋ ๋ฐ์ํ๋ ์๋ฌ
๋ฌธ์ ์ํฉ
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
def solution(answers):
tf={}
answer = {'1':cnt1, '2':cnt2, '3':cnt3}
math = {'1' :[1,2,3,4,5],'2':[2,1,2,3,2,4,2,5], '3':[3,3,1,1,2,2,4,4,5,5]}
for key, values in math.items():
i, j = divmod(len(answers),len(values))
tf[key] = (values*i+values[:j])
for key, values in tf.items():
if key == '1':
for i, j in zip(values,answers):
if i == j:
cnt1+=1
elif key == '2':
for i, j in zip(values,answers):
if i == j:
cnt2+=1
else:
for i, j in zip(values,answers):
if i == j:
cnt3+=1
answer = max(answer, key = answer.get)
return answer
๐ ์๋ฌํ์
Unbound Local Error๋ ๋ณดํต ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ๋ฐ์ํ๋ค.
x = 1
def func():
x +=1
print(x)
func()
์์ ๊ฒฝ์ฐ x๋ผ๋ ๋ณ์๋ฅผ ํจ์ ๋ฐ์์ ์ง์ ํ๋๋ฐ ์ด ๋ `x=1`์ด๋ผ๊ณ ์ง์ ๋ ๋ณ์๋ ์ ์ญ๋ณ์(global variable)๊ฐ ๋๋ค. ํ์ด์ฌ์ ์ฝ๋ ์์ฑ ์์์ ๋ฐ๋ผ ์์ฐจ์ ์ผ๋ก ๊ตฌ๋ํด x=1์ด ํจ์ ๋ด๋ถ์์๋ ์ ์ฉ๋ ๊ฒ ๊ฐ์ง๋ง ๊ทธ๋ ์ง ์๋ค. ํจ์ ๋ด๋ถ์์ ์ฌ์ฉ๋๊ณ ์๋ ๋ณ์ `x`๋ ์ด๋ฆ์ด ๊ฐ์ ๋ฟ ์ง์ญ๋ณ์(local variable)๋ก ๋ณ๊ฐ์ ๋ณ์์ด๋ค. ๋ฐ๋ผ์ ์ด ๊ฒฝ์ฐ ํจ์ ๋ด๋ถ์ x๋ผ๋ ๋ณ์๊ฐ ์ง์ ๋์ง ์์ ์ฑ ๋ฌด์์ 1์ ๋ํ๊ณ ์์ผ๋ 'cannot access local variable 'x' ๋ก์ปฌ๋ณ์ 'x'์ ์์ธ์ค ํ ์ ์์ต๋๋ค.'์ ๊ฐ์ ์๋ฌ๋ฌธ๊ตฌ๊ฐ ๋จ๋ ๊ฒ์ด๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ๋ค์์ ๋ฐฉ๋ฒ๋ค์ ์ ์ฉํด๋ณผ ์ ์๋ค.
1. `x=1`์ ํจ์ ์์ ๋ฃ์ด์ฃผ๊ธฐ
def func():
x = 1
x += 1
print(x)
func()
## 2
๊ฐ๋จํ ํด๊ฒฐ๋ฐฉ๋ฒ์ผ๋ก๋ ํด๋น ๋ณ์๋ฅผ local variable๋ก ์ฌ์ฉํ ์ ์๋๋ก ํจ์ ๋ด์์ ์ ์ธํด์ฃผ๋ ๋ฐฉ์์ด ์๋ค. ์์ ๊ฐ์ด ์ ์ญ๋ณ์์๋ x=1์ ๋จ์ํ๊ฒ ํจ์ ์์ ๋ฃ์ด์ฃผ๊ธฐ๋ง ํ๋ฉด, ๋๋ x=0์ด๋ผ๊ณ ํจ์ ๋ด๋ถ์์ ์ ์ธ์ ํด์ฃผ๊ธฐ๋ง ํ๋ค๋ฉด, ์๋ฌ๋ ๊ฐ๋จํ๊ฒ ํด๊ฒฐ๋ ์ ์๋ค.
๊ทธ๋ฌ๋ ์ด ๋ฐฉ๋ฒ์ ๋ชจ๋ ๊ฒฝ์ฐ์๋ ์ ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค. ํจ์ ์ธ๋ถ์์ ํด๋น ๋ณ์๋ฅผ ๊ณ์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ํ ํจ์ ์ธ๋ถ์ ๋ด๋ถ์์ ํน์ ๋ณ์๋ฅผ ์ฐ์์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค. (๋ณ์์ ์ด๋ฆ์ด ๊ฐ์ ๋ฟ ๊ทผ๋ณธ์ ์ผ๋ก๋ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค. ์๊น์๋ ๊ฐ์ง๋ง ์์ ๋ค๋ฅธ ์ฌ๋ ์ผ ์ ์๋ ๋ํ๊ฐฑ์ด์ ๊ฐ๋ค.) ๋ฐ๋ผ์ ์กฐ๊ธ ๋ ๊ทผ๋ณธ์ ์ธ ํด๊ฒฐ๋ฒ์ผ๋ก๋ ๋ฐฉ๋ฒ 2๋ฅผ ์ถ์ฒํ๋ค.
2. global variable ์ง์ ํ๊ธฐ
x = 1
def func():
global x
x += 1
print(x)
func()
## 2
์ด๋ ๊ฒ ํจ์ ๋ด์์ `global x`์ ๊ฐ์ด ์ ์ญ ๋ณ์ ์ ์ธ์ ํด์ฃผ๋ฉด, ํจ์ ๋ฐ์์ ์ ์ธ๋ ์ ์ญ๋ณ์๋ฅผ ์ฐ์์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ณ ์๋ฌ ์ญ์ ํด๊ฒฐํ ์ ์๋ค.
๐ต๏ธโ๏ธ ๋ฌธ์ ํด๊ฒฐ
๋ค์ ๋งํด, UnboundLocalError๋ ๊ธ๋ก๋ฒ ๋ณ์๋ฅผ ํจ์ ๋ด๋ถ์์ ๋ณ๋์ ์ ์ธ ์์ด ์ด์ฉํ๋ ๊ฒฝ์ฐ ๋ฐ์ํ ์ ์๋ค. ๋์ ๊ฒฝ์ฐ ์๋ฌ๋ฅผ ์ ๋ฐํ ๊ฐ์ฅ ํฐ ๋ณ์๋ `answer = {'1':cnt1, '2':cnt2, '3':cnt3}`๋ด๋ถ์์ ๋ณ๋์ ์ ์ธ ์์ด ์ฌ์ฉ๋ cnt1, cnt2, cnt3์๋ค. ๋ฐ๋ผ์ ์ด ๊ฒฝ์ฐ ํจ์ ๋ด์ cnt1, cnt2, cnt3 ์ธ ๋ณ์๋ฅผ ๋จผ์ ์ ์ธํด์ฃผ๋ฉด ์ค๋ฅ๊ฐ ํด๊ฒฐ๋๋ค.
def solution(answers):
tf={}
cnt1 = 0
cnt2 = 0
cnt3 = 0
answer = {'1':cnt1, '2':cnt2, '3':cnt3}
math = {'1' :[1,2,3,4,5],'2':[2,1,2,3,2,4,2,5], '3':[3,3,1,1,2,2,4,4,5,5]}
for key, values in math.items():
i, j = divmod(len(answers),len(values))
tf[key] = (values*i+values[:j])
for key, values in tf.items():
if key == '1':
for i, j in zip(values,answers):
if i == j:
cnt1+=1
elif key == '2':
for i, j in zip(values,answers):
if i == j:
cnt2+=1
else:
for i, j in zip(values,answers):
if i == j:
cnt3+=1
answer = max(answer, key = answer.get)
return answer
๋์ ๊ฒฝ์ฐ๋ ํ๋ก๊ทธ๋๋จธ์ค ํ ์คํธ์์ ์ค๋ฅ๊ฐ ๋ฌ๋ค๋ ์ ์์ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ์ํฉ๋ค๊ณผ๋ ์กฐ๊ธ ๋ค๋ฅด๋ค. ํ๋ก๊ทธ๋๋จธ์ค์ ์๊ณ ๋ฆฌ์ฆ ์ฝ๋ฉํ ์คํธ ์ฐ์ต์์๋ ๋ณดํต ํจ์๋ฅผ ๋ง๋ ๋ค. '์๊ณ ๋ฆฌ์ฆ'์ผ๋ก์ ๊ธฐ๋ฅํ ํ๋์ ํจ์๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ต์ข ๋ชฉํ์ธ๋ฐ, ๋์ ๊ฒฝ์ฐ vscode๋ก 'ํจ์'๊ฐ ์๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์ง์ ๋ง๋ค์๊ธฐ ๋๋ฌธ์ ๊ธ๋ก๋ฒ/๋ก์ปฌ ์๋ฌ๋ ๋์ง ์์๋ ๊ฒ.
'๐ Today I Learn > ๐พ Error' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ModuleNotFoundError: No module named 'tensorflow.keras' (1) | 2024.06.12 |
---|---|
[Python] ๋ฐ๋ณต๋ฌธ์์ remove ์ฌ์ฉ์ ์ ์ํ ์ (0) | 2024.05.13 |
[Python] IndexError: list index out of range (0) | 2024.05.07 |
[SQL] Error [1406][22001]: Data truncation: Data too long for column (0) | 2024.05.04 |