반응형
이 코드를 실행하려고합니다.
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
반응형
'파이썬' 카테고리의 다른 글
파이썬 주어진 디렉토리에있는 파일을 어떻게 반복 할 수 있습니까? (0) | 2021.02.19 |
---|---|
파이썬 Python의 정적 클래스 (0) | 2021.02.19 |
파이썬 Matplotlib 다른 크기의 서브 플롯 (0) | 2021.02.18 |
파이썬 .txt 파일을 읽고 각 줄을 메모리에 저장하는 방법이 있습니까? (0) | 2021.02.18 |
파이썬 Check if something is (not) in a list in Python (0) | 2021.02.18 |
댓글