processing.runalg () lança "TypeError: capturar classes que não herdam de BaseException não é permitido"

11

Olá a todos. De alguma forma, sou novo no PyQGIS e tenho tentado executar um script no QGIS 3.0 sem sucesso (ele foi executado normalmente na 2.18) e sempre obtém o mesmo erro:

AttributeError: módulo 'processing' não tem atributo 'runalg' Durante o tratamento da exceção acima, ocorreu outra exceção: Traceback (última chamada mais recente): Arquivo "C: \ PROGRA ~ 1 \ QGIS3 ~ 1.0 \ apps \ Python36 \ lib \ code.py ", linha 91, no runcode exec (code, self.locals) Arquivo" ", linha 8, em TypeError: não é permitido capturar classes que não herdam de BaseException

Isso tem algo a ver com PYTHONPATH? Não consigo nem ver a lista de algoritmos ao digitar: processing.alglist ()

LE_Geomatica
fonte

Respostas:

10

Esta não é uma resposta para a pergunta original, mas para uma pergunta de acompanhamento em um comentário ("Além disso, como posso ver a lista e as opções dos algoritmos?").

No QGIS 3, os algoritmos de processamento podem ser listados no console do QGIS Python (Python 3) usando (consulte https://gis.stackexchange.com/a/274902/22646 e https://gis.stackexchange.com/a/ 274874/22646 ):

QgsApplication.processingRegistry().algorithms()

Para listar os nomes (IDs):

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

Obtendo ajuda para um algoritmo (incluindo parâmetros de entrada e saída):

processing.algorithmHelp("qgis:union")

Há também:

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

Mas não parece incluir algoritmos, por exemplo, gdal e grass.

Håvard Tveite
fonte
A documentação do QGIS agora foi atualizada (consulte docs.qgis.org/testing/en/docs/user_manual/processing/… ).
Håvard Tveite
14

No QGIS 3, use processing.run.

Por exemplo:

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

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

Mike
fonte
Funciona perfeitamente bem. Além disso, como posso ver a lista e as opções dos algoritmos? Eu tentei processing.alglist () e processing.list (), mas ambos lançam um erro semelhante.
LE_Geomatica 14/03