본문 바로가기
파이썬

파이썬 UnboundLocalError : 할당 전에 참조 된 지역 변수 'x'

by º기록 2021. 2. 19.
반응형

이 코드를 실행하려고합니다.

import osgeo.ogr

def findPoints(geometry, results):
    for i in range(geometry.GetPointCount()):
        x,y,z = geometry.GetPoint(i)
    if results['north'] == None or results['north'][1] < y:
        results['north'] = (x,y)
    if results['south'] == None or results['south'][1] > y:
        results['south'] = (x,y)
    for i in range(geometry.GetGeometryCount()):
        findPoints(geometry.GetGeometryRef(i), results)

shapefile = osgeo.ogr.Open("../../Data/tl_2009_us_state/tl_2009_us_state.shp")
layer = shapefile.GetLayer(0)
feature = layer.GetFeature(53)
geometry = feature.GetGeometryRef()

results = {'north' : None,
           'south' : None}

findPoints(geometry, results)

이 오류가 계속 발생합니다.

Traceback (most recent call last):
  File "identify_northsouth_point.py", line 22, in <module>
    findPoints(geometry, results)
  File "identify_northsouth_point.py", line 8, in findPoints
    results['north'] = (x,y)
UnboundLocalError: local variable 'x' referenced before assignment

전역 및 비 로컬을 시도했지만 작동하지 않습니다. 함수 외부에서 입력을 얻지 못하기 때문에 어쨌든 전역 또는 비 로컬이 필요하지 않습니다.

 

해결 방법

 

오류 메시지는 변수 x 에 값이 없음을 나타냅니다. for 루프에서 (반복적으로) 할당 되었기 때문에 이는 for 루프가 한 번도 실행되지 않음을 의미합니다. 이것이 일어날 수있는 유일한 방법은 geometry.GetPointCount () 0 을 반환하는 경우입니다. 따라서 이것이 일어나야하는 일입니다. 확인하려면 print geometry.GetPointCount () 를 추가하세요.

if 문이 루프의 내부 에 있도록하여 도형의 각 지점에 대해 실행되고 그렇지 않도록 기하학이 0 점을 가질 때 전혀 실행됩니까? 그렇다면 적절하게 들여 쓰기하십시오.

 

참조 페이지 https://stackoverflow.com/questions/10388271

 

 

반응형

댓글