strange error when trying to log something


R

Ryszard Szopa

Hi,

I've recently reinstalled Python 2.6 (from DMG) on my Mac, and I am
running into very strage errors. Namely, logging seems to be badly
broken. When I open the interpreter through Django's manage.py shell
and try to use logging, I get the following error:
------------------------------------------------------------
Traceback (most recent call last):
File "<ipython console>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
python2.6/logging/__init__.py", line 1416, in critical
root.critical(*((msg,)+args), **kwargs)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
python2.6/logging/__init__.py", line 1074, in critical
self._log(CRITICAL, msg, args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
python2.6/logging/__init__.py", line 1142, in _log
record = self.makeRecord(self.name, level, fn, lno, msg, args,
exc_info, func, extra)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
python2.6/logging/__init__.py", line 1117, in makeRecord
rv = LogRecord(name, level, fn, lno, msg, args, exc_info, func)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
python2.6/logging/__init__.py", line 272, in __init__
from multiprocessing import current_process
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
python2.6/multiprocessing/__init__.py", line 64, in <module>
from multiprocessing.util import SUBDEBUG, SUBWARNING
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
python2.6/multiprocessing/util.py", line 121, in <module>
_afterfork_registry = weakref.WeakValueDictionary()
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
python2.6/weakref.py", line 51, in __init__
UserDict.UserDict.__init__(self, *args, **kw)
TypeError: unbound method __init__() must be called with UserDict
instance as first argument (got WeakValueDictionary instance instead)

I was able to silence the error (and be able to work normally) by
making UserDict.UserDict inherit from object.

Any ideas what is causing the error? Before I updated Python
everything was fine. Am I breaking a lot of things by making
UserDict.UserDict a new style class?

Thanks in advance for any insight.

-- Ryszard Szopa
 
Ad

Advertisements

P

Peter Otten

Ryszard said:
Hi,

I've recently reinstalled Python 2.6 (from DMG) on my Mac, and I am
running into very strage errors. Namely, logging seems to be badly
broken. When I open the interpreter through Django's manage.py shell
and try to use logging, I get the following error:

------------------------------------------------------------
Traceback (most recent call last):
File "<ipython console>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
python2.6/logging/__init__.py", line 1416, in critical
root.critical(*((msg,)+args), **kwargs)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
python2.6/logging/__init__.py", line 1074, in critical
self._log(CRITICAL, msg, args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
python2.6/logging/__init__.py", line 1142, in _log
record = self.makeRecord(self.name, level, fn, lno, msg, args,
exc_info, func, extra)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
python2.6/logging/__init__.py", line 1117, in makeRecord
rv = LogRecord(name, level, fn, lno, msg, args, exc_info, func)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
python2.6/logging/__init__.py", line 272, in __init__
from multiprocessing import current_process
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
python2.6/multiprocessing/__init__.py", line 64, in <module>
from multiprocessing.util import SUBDEBUG, SUBWARNING
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
python2.6/multiprocessing/util.py", line 121, in <module>
_afterfork_registry = weakref.WeakValueDictionary()
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
python2.6/weakref.py", line 51, in __init__
UserDict.UserDict.__init__(self, *args, **kw)
TypeError: unbound method __init__() must be called with UserDict
instance as first argument (got WeakValueDictionary instance instead)

I was able to silence the error (and be able to work normally) by
making UserDict.UserDict inherit from object.

Any ideas what is causing the error? Before I updated Python
everything was fine. Am I breaking a lot of things by making
UserDict.UserDict a new style class?

Thanks in advance for any insight.

-- Ryszard Szopa

I have a hunch that you are triggering a reload() somewhere. Example:

Python 2.6.2 (release26-maint, Apr 19 2009, 01:58:18)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/weakref.py", line 51, in __init__
UserDict.UserDict.__init__(self, *args, **kw)
TypeError: unbound method __init__() must be called with UserDict instance
as first argument (got WeakValueDictionary instance instead)

Try restarting the interpreter after any change to source files.

Peter
 
A

Aahz

I have a hunch that you are triggering a reload() somewhere. Example:

Python 2.6.2 (release26-maint, Apr 19 2009, 01:58:18)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/weakref.py", line 51, in __init__
UserDict.UserDict.__init__(self, *args, **kw)
TypeError: unbound method __init__() must be called with UserDict instance
as first argument (got WeakValueDictionary instance instead)

Nice sleuthing! How did you figure that out?
--
Aahz ([email protected]) <*> http://www.pythoncraft.com/

"At Resolver we've found it useful to short-circuit any doubt and just
refer to comments in code as 'lies'. :)"
--Michael Foord paraphrases Christian Muirhead on python-dev, 2009-03-22
 
Ad

Advertisements

P

Peter Otten

Aahz said:
I have a hunch that you are triggering a reload() somewhere. Example:

Python 2.6.2 (release26-maint, Apr 19 2009, 01:58:18)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
import weakref
weakref.WeakValueDictionary()
import UserDict
reload(UserDict)
weakref.WeakValueDictionary()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/weakref.py", line 51, in __init__
UserDict.UserDict.__init__(self, *args, **kw)
TypeError: unbound method __init__() must be called with UserDict instance
as first argument (got WeakValueDictionary instance instead)

Nice sleuthing! How did you figure that out?

Roughly:

- The poster's description/remedy makes no sense (to me); have a look at the
traceback.
- Nothing suspicious except the actual error message. Isn't
WeakValueDictionary a UserDict? Verify.
- There must be two different UserDict classes. This can happen to an
unsuspecting user by importing the main script or by doing a reload().
UserDict is unlikely to be the main script, and web frameworks (django was
mentioned) often use a reload mechanism to avoid frequent server restarts.
- Reproduce the error.

Peter
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top