An idea: Catch the exception; in the handler, try to simply "import django". 
If this works, reraise, if it fails, print helpful message.

On Thursday 31 March 2016 20:15:05 Tim Graham wrote:
> Ben Welsh (palewire) raised a proposal on a GitHub pull request [0]:
> 
> I've seen newbies flounder when they receive this error after running
> manage.py.
> 
> $ python manage.py
> Traceback (most recent call last):
>   File "manage.py", line 7, in <module>
>     from django.core.management import execute_from_command_line
> ImportError: No module named django.core.management
> 
> The root cause is almost always simple, like forgetting install Django with
> pip or neglecting to "activate" a virtual environment. But the Python
> jargon doesn't do much to help people new to our world connect the dots.
> 
> My proposal: Catch that error and print out a more verbose message that
> explains to the user exactly what's wrong. Here's my draft. I'd welcome any
> changes, but I think something along these lines could better welcome new
> people into Django.
> 
> Traceback (most recent call last):
>   File "manage.py", line 11, in <module>
>     installed and available on your PATH variable?")
> ImportError: Couldn't import Django. Are you sure it's installed and
> available on your PYTHONPATH environment variable? Did you forget to
> activate a virtual environment?
> 
> 
> 
> ---------------------
> Claude says, "I'm not convinced about this. Aren't we hiding other possibly
> helpful import errors (at least on Python 2)?"
> Aymeric says, "I share Claude's concern. We've been constantly removing
> that sort of "helpful" exception wrapping from Django"
> Aymeric again, after further investigation, "Importing
> django.core.management doesn't ripple too far. Specifically it doesn't
> import any of the user's code. This reduces the likelihood of masking
> useful errors. It will mask exception info if Django is installed
> incorrectly, for instance because two installs happened in the same
> location (but I think that's less likely since pip/virtualenv became
> mainstream and since we added code to setup.py to detect existing
> installs).
> 
> Does anyone else have opinions on the change? I suppose another option
> could be to try to reraise the original exception with the "helpful
> message" added.
> 
> 
> [0] https://github.com/django/django/pull/6314

Reply via email to