1

Related to Import error for qgis.core when running OSGeo4w shell script

I try to detect if my script is run from a QGIS instance (through the plugin) or from a standard python console. This detection will enable conditional imports of the required librairies which are different from a case to the other.

For conditional imports, I found here

try:
 import module
except ImportError:
 import otherModule as module

and tried to adapt it for my use case but I can't raise a convenient error:

E.G.

try:
 import processing
except:
 # Load required libraries to run from python (!Unstable!)
 # See https://gis.stackexchange.com/questions/129915/cannot-run-standalone-qgis-script
 # for any improvements
 import os, sys, glob
 # Prepare the environment
 ... 
 # See https://gis.stackexchange.com/questions/129915/cannot-run-standalone-qgis-script

Returns me following error : QPixmap: Must construct a QApplication before a QPaintDevice

and does not instead enters the except clause what is sad.

asked Jan 20, 2016 at 15:55

1 Answer 1

2

The error QPixmap: Must construct a QApplication before a QPaintDevice seems to be related to the fact you don't declare a QApplication before your try/except statement.

The other issue about try except is only about Python.

You can manage error correctly with:

try:
 # To be sure it fails
 import processing1
except Exception, e:
 print type(e), e

You will see that you can catch various exceptions types. There is one specific import error. Hence, above try/except could be improve with:

try:
 # To be sure it fails
 import processing1
except ImportError, e:
 print type(e), e
else:
 print "Other error"

Edit: Although my answer was correct, it wasn't enough to help.

You can do the following to differentiate context:

try:
 canvas = iface.mapCanvas()
 print 'You are in a QGIS console'
except Exception, e:
 print 'You are in an external script', e

iface is imported only in a QGIS console context e.g the official docs http://docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/intro.html#python-console

answered Jan 20, 2016 at 22:09
2
  • The goal is to detect if we are on Qgis console or on an extern python console (because imports are different). That's why I tried to generate an error. But the "QPixmap: Must construct a QApplication before a QPaintDevice" makes the console crash and the error handling does not goes through the except clause as it should in a good error management system. Commented Jan 21, 2016 at 22:55
  • Great, ty for the edit! I went other the docs, but not carefully enough! Commented Jan 22, 2016 at 12:23

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.