Today it's very hard to debug ImportErrors raise inside modules referenced through a zcml directive, because the ImportError is swallowed an no traceback comes back to the user. Just a ConfigurationError: ('Invalid value for', 'class', "Couldn't import some.class, cannot import name somename")
which doesn't point anywhere useful.

I'd like to modify zope.configuration.config to something like:

            mod = __import__(mname, *_import_chickens)
        except ImportError, v:
+            if sys.exc_info()[2].tb_next is not None:
+                # ImportError was caused deeper
+                raise
            raise ConfigurationError, (
                "Couldn't import %s, %s" % (mname, v)
                ), sys.exc_info()[2]

Instead of the simpler code that was there (this nice trick is by PJE, and is used ).

Also I need to fix zope.configuration.xmlconfig, today it has a bare except:

            self.context.begin(name, data, info)
            if self.testing:
            raise ZopeXMLConfigurationError, (
                info, sys.exc_info()[0], sys.exc_info()[1]
                ), sys.exc_info()[2]

Shouldn't it just catch ConfigurationError?

With both changes I get much nicer error report: just a traceback with the correct info.


Florent Guillaume, Nuxeo (Paris, France)   Director of R&D
+33 1 40 33 71 59   [EMAIL PROTECTED]

Zope3-dev mailing list

Reply via email to