I'm writing a Python script to use it in Processing framework. I need to cancel script execution if certain conditions are met (to save user's time). I tried to use sys.exit(arguments)
command. The issue is that not only the script, but QGIS itself shuts down too. I also tried quit()
but result is the same. How should I terminate script in Processing framework?
UPDATE: Note, that following code is for reproduction purpose only. I don't need ad hoc solution for this particular case because I already have it. I need to know how to deal with this issue in general.
##Raster processing=group
##raster_1=raster
##raster_2=raster
from osgeo import gdal
import sys
from numpy import *
import ntpath
import re
import platform
from PyQt4 import QtGui
raster_1 = gdal.Open(raster_1)
raster_2 = gdal.Open(raster_2)
rasters_list = [raster_1, raster_2]
# create a message for the case when CRSs of rasters do not match
class WrongCRS(QtGui.QMessageBox):
def __init__(self):
super(WrongCRS, self).__init__()
self.initUI()
def initUI(self):
self.warning(self, 'Oops!',
"Rasters must have the same CRS!\n\nExecution cancelled!", QtGui.QMessageBox.Ok)
# check CRS
proj = None
for raster in rasters_list:
new_proj = raster.GetProjection()
if proj is None:
proj = new_proj
else:
if proj != new_proj:
WrongCRS()
sys.exit('CRSs do not match!')
else:
continue
Answer
It is impossible (for now at least) to terminate Processing python script and leave QGIS itself untouched. It was suggested by @gene to use sys.exitfunc() to terminate main function. However I find it more useful to use just return message
to just end function normally. Here is pseudo code:
class ErrorMessage(...):
.....
def checkFunction(parameter):
if parameter == condition:
return False
else:
return True
def jobFunction(...):
...
if parameter_1 == condition_1:
return False
result = ...
return result
def main(...):
if not checkFunction(parameter):
return ErrorMessage(...)
result = jobFunction(...)
if result == False:
return ErrorMessage(...)
return result
main(...)
No comments:
Post a Comment