On Mon, May 17, 2010 at 6:10 AM, cool-RR <ram.rac...@gmail.com> wrote: > Hello all. > > This is my first time on Django-developers. > > I remember that a few months ago, when I was doing some Django work, > there was something that annoyed me. I hope I'm remembering this > correctly, please correct me if I'm wrong. It happened sometimes that > the settings module in my project/app will cause an ImportError inside > itself. This will be caught by the `except` in the block that tries to > import the settings module, and this will cause it to raise another > ImportError saying that the settings module wasn't found or caused an > ImportError. This would make it difficult to understand how exactly > the settings module was causing the ImportError. > > Is this precise? Does this still happen?
Yes, there are places where import errors get swallowed, which can lead to confusing or misleading stack traces. Some of these cases have been improved in Django 1.2, but I'm sure there are many still lurking. If you want to know if a specific case is still broken, you'll need to test that case and let us know. > Because I have just implemented something that solves this annoyance > for my own project, (which is unrelated to Django but also has a need > to import a settings module, similarly to Django.) In my solution, if > the settings module doesn't exist, I can get an ImportError (if I > wish, I can also make it fail silently), but if there's an ImportError > inside, I will have that error raised as itself, and not caught by my > logic, making it easier to debug. > > I'm basically just trying `imp.find_module` before I import. You may want to check the newly added django.utils.module_loading; this is a module that provides utilities for checking the existence of modules independently of the import proces (which was the cause of several of the import problems previously). > Would you have any interest in me patching Django to use this logic? We'd need to see the patch. Also, keep in mind that anything touching the import logic is about 5 times harder than you think it is, even when you take this advice into account :-) In particular, you need to keep in mind importing from eggs and importing from custom module loaders, both of which behave in ways that are subtly (but significantly) different to normal CPython module loading. The module_loading tool I mentioned previously expanded from a 20 line method to a 60 line method because of these differences. Yours, Russ Magee %-) -- You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to django-develop...@googlegroups.com. To unsubscribe from this group, send email to django-developers+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-developers?hl=en.