[Python-Dev] patch for review: unittest ImportError handling

Chris Jerdonek chris.jerdonek at gmail.com
Wed Apr 14 12:54:29 CEST 2010


On Wed, Apr 14, 2010 at 2:07 AM, Michael Foord
<fuzzyman at voidspace.org.uk> wrote:
> I'm still not convinced that this isn't a backwards incompatible change - up
> until now, however horrible it may be, TestLoader.loadTestsFromName only
> raised an AttributeError when it failed to load a test. Changing it to allow
> it propagate ImportError means that code catching errors by handling
> AttributeError will be potentially broken by the fix. I'm certainly happy to
> discuss this here though.

Thanks for your response. Michael.  To understand your position
better, would you view changing the AttributeError in *any* way an
incompatible change (e.g. changing just the error message), or is it
only changing the error type that you view as backwards incompatible?

The reason I ask is that I think it's the change in what the error
contains (e.g. the error message and stack trace) that is the more
important part of this change -- rather than whether that information
be wrapped in an ImportError versus an AttributeError.  It is the
information rather than the particular error type that will assist an
end-developer in diagnosing future unit-test failures.

> An alternative fix would be for a new API and deprecation of
> loadTestFromName. A new API could return a placeholder test that raises the
> original error when run - that way individual errors don't break the test
> collection phase but are still reported. This *could* be added to
> loadTestsFromName with an optional argument.

I'm not opposed to adding a new API, but I think it would be valuable
if we could find a way for people to enjoy the benefit of not having
the stack trace swallowed -- without having to change their code.  I'm
currently part of a project where the current behavior makes it harder
to track down unit test failures.  I imagine many developers are in a
similar situation.  This seems to be a bug, and such developers may be
in a position where they can't change how their unit tests are run,
but they're nevertheless stuck diagnosing the failures.

I'm writing on the assumption that there is a way to preserve the
stack trace and error message of an ImportError while re-raising it as
an AttributeError.

> By the way, in general please don't assign unittest bugs *away* from me on
> the tracker.

Will do.  I hadn't come across any guidance re: assigning in the
development workflow documentation.  Maybe we should add a cautionary
note about this in the documentation somewhere.  In general, do all
reports stay assigned to the maintainer (if a maintainer exists), or
is it a per-maintainer preference on how that is handled?

Thanks,
--Chris


More information about the Python-Dev mailing list