Ошибка сегментации, возвращающая объект слоя OGR из функции в Python - PullRequest
0 голосов
/ 13 января 2019

У меня есть простая программа, которая обрабатывает точки из слоя Geopackage. С первой попытки я инкапсулировал доступ к файлу в функцию:

from osgeo import ogr

pointsFile = "points.gpkg"

def getPoints():

    driver = ogr.GetDriverByName("GPKG")
    dataSource = driver.Open(pointsFile, 0)
    layer = dataSource.GetLayer(0)
    print("Returning layer")
    return layer

def main():

    layer = getPoints()
    print("Number of points to process: ", layer.GetFeatureCount())


if __name__ == '__main__': main()

Который завершается ошибкой сегментации, когда возвращает объект слоя:

$ python3 testReturn.py
Returning layer
Segmentation fault (core dumped)

Однако, с доступом к файлу внутри main:

from osgeo import ogr

pointsFile = "points.gpkg"

def main():

    driver = ogr.GetDriverByName("GPKG")
    dataSource = driver.Open(pointsFile, 0)
    layer = dataSource.GetLayer(0)
    print("Number of points to process: ", layer.GetFeatureCount())


if __name__ == '__main__': main()

программа работает как положено:

$ python3 testDirect.py
Number of points to process:  21872

Что может быть причиной этой проблемы?

1 Ответ

0 голосов
/ 14 января 2019

Протестировал код с помощью GDB, и при вызове возникает ошибка сегментации:

layer.GetFeatureCount ()

Некоторая дополнительная информация об отладке:

Запуск программы: / usr / bin / python3 testReturn.py

[Отладка потоков с использованием libthread_db]

Использование библиотеки libthread_db хоста "/lib/x86_64-linux-gnu/libthread_db.so.1".

возвратный слой Программа получила сигнал SIGSEGV, Ошибка сегментации. 0x00007ffff5c42298 в OGR_L_GetFeatureCount () из /usr/local/lib/libgdal.so.20 (GDB)

...