strange error when trying to log something

Peter Otten __peter__ at web.de
Thu Jul 23 05:29:13 EDT 2009


Ryszard Szopa wrote:

> 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:
> 
>>>> logging.critical('ala')
> ------------------------------------------------------------
> 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.
>>> import weakref
>>> weakref.WeakValueDictionary()
<WeakValueDictionary at 140598938447312>
>>> import UserDict
>>> reload(UserDict)
<module 'UserDict' from '/usr/lib/python2.6/UserDict.pyc'>
>>> 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)

Try restarting the interpreter after any change to source files.

Peter




More information about the Python-list mailing list