processing.runalg () выдает «TypeError: перехват классов, которые не наследуются от BaseException, не разрешен»

11

Привет всем! Я в некотором роде новичок в PyQGIS, и я пытался запустить скрипт в QGIS 3.0 безуспешно (он точно работал в 2.18) и всегда получал одну и ту же ошибку:

AttributeError: модуль 'processing' не имеет атрибута 'runalg' Во время обработки вышеупомянутого исключения произошло еще одно исключение: обратная связь (последний вызов был последним): файл "C: \ PROGRA ~ 1 \ QGIS3 ~ 1.0 \ apps \ Python36 \ lib \ code.py ", строка 91, в файле runcode exec (code, self.locals)" ", строка 8, в TypeError: перехват классов, которые не наследуются от BaseException, не допускается

Это как-то связано с PYTHONPATH? Я даже не вижу список алгоритмов при наборе: processing.alglist ()

LE_Geomatica
источник

Ответы:

10

Это не ответ на первоначальный вопрос, а на дополнительный вопрос в комментарии («Также, как я могу увидеть список и варианты алгоритмов?»).

В QGIS 3 алгоритмы обработки могут быть перечислены в консоли QGIS Python (Python 3) с помощью (см. Https://gis.stackexchange.com/a/274902/22646 и https://gis.stackexchange.com/a/ 274874/22646 ):

QgsApplication.processingRegistry().algorithms()

Чтобы перечислить имена (идентификаторы):

for alg in QgsApplication.processingRegistry().algorithms(): print(alg.id())

Получение справки для алгоритма (включая входные параметры и выходные данные):

processing.algorithmHelp("qgis:union")

Есть также:

processing.algs.help.shortHelp.keys()
print("\n".join(processing.algs.help.shortHelp.keys()))

Но, похоже, он не включает алгоритмы, например, от gdal и grass.

Ховард Твите
источник
Документация QGIS была обновлена ​​(см. Docs.qgis.org/testing/en/docs/user_manual/processing/… ).
Håvard Tveite
14

В QGIS 3 используйте processing.run.

Например:

QGIS 2.x processing.runalg('gdalogr:convertformat', ...

QGIS 3.0 processing.run('gdal:convertformat', ...

Майк
источник
Работает отлично. Также как посмотреть список и варианты алгоритмов? Я пробовал processing.alglist () и processing.list (), но оба выдают похожую ошибку.
LE_Geomatica