NameError for built-in Python functions in Django when working with uWSGI
Question
I'm running Django 1.3 + Python 2.6 on Ubuntu 10.10 (64bit) with uWSGI (0.9.8). However, occasionally I can find some strange logs in uwsgi.log, reporting that 'getattr', 'isinstance' is not defined. But aren't they Python's built-in functions? Why Django unable to find them? This happens not often when traffic is low of when the uwsgi server restarts, and appear much often when the traffic is large and the server runs for a short while.
I'm sure that there is nothing wrong with my django application, but I'm not sure if this is a bug in Django, uWSGI or even Python 2.6.
UPDATE: The latest version of uWSGI doesn't seemed to have this again.
Detail log:
Error in sys.excepthook:
Traceback (most recent call last):
File "/usr/lib/python2.6/dist-packages/apport_python_hook.py", line 48, in apport_excepthook
if not enabled():
File "/usr/lib/python2.6/dist-packages/apport_python_hook.py", line 24, in enabled
return re.search('^\s*enabled\s*=\s*0\s*$', conf, re.M) is None
File "/usr/lib/python2.6/re.py", line 142, in search
return _compile(pattern, flags).search(string)
File "/usr/lib/python2.6/re.py", line 236, in _compile
if isinstance(pattern, _pattern_type):
NameError: global name 'isinstance' is not defined
Original exception was:
Traceback (most recent call last):
File "/usr/local/lib/python2.6/dist-
packages/django/core/handlers/wsgi.py", line 258, in __call__
set_script_prefix(base.get_script_name(environ))
File "/usr/local/lib/python2.6/dist-
packages/django/core/handlers/base.py", line 239, in get_script_name
if settings.FORCE_SCRIPT_NAME is not None:
File "/usr/local/lib/python2.6/dist-
packages/django/utils/functional.py", line 277, in __getattr__
return getattr(self._wrapped, name)
NameError: global name 'getattr' is not defined Traceback (most recent call last):
File "/usr/local/lib/python2.6/dist-
packages/django/core/handlers/wsgi.py", line 258, in __call__
set_script_prefix(base.get_script_name(environ))
File "/usr/local/lib/python2.6/dist-
packages/django/core/handlers/base.py", line 252, in get_script_name
return force_unicode(environ.get('SCRIPT_NAME', u''))
File "/usr/local/lib/python2.6/dist-packages/django/utils/encoding.py",
line 64, in force_unicode
if isinstance(s, unicode):
NameError: global name 'isinstance' is not defined Error in sys.excepthook:
Traceback (most recent call last):
File "/usr/lib/python2.6/dist-packages/apport_python_hook.py", line 48, in apport_excepthook
if not enabled():
File "/usr/lib/python2.6/dist-packages/apport_python_hook.py", line 24, in enabled
return re.search('^\s*enabled\s*=\s*0\s*$', conf, re.M) is None
File "/usr/lib/python2.6/re.py", line 142, in search
return _compile(pattern, flags).search(string)
File "/usr/lib/python2.6/re.py", line 236, in _compile
if isinstance(pattern, _pattern_type):
NameError: global name 'isinstance' is not defined
Solution
Can you try with the latest tip ? It looks like a reference counting bug that should be fixed in 0.9.9-dev
If you can confirm it solves your problem i will release an updated release with only this fix applied.
Many thanks for the report