2010-09-19 22:58:26 Phil Thompson napisał(a): > On Sun, 19 Sep 2010 22:55:17 +0200, Arfrever Frehtes Taifersar Arahesis > <arfrever....@gmail.com> wrote: > > 2010-09-19 15:24:53 Phil Thompson napisał(a): > >> On Fri, 17 Sep 2010 20:51:55 +0200, Arfrever Frehtes Taifersar Arahesis > >> <arfrever....@gmail.com> wrote: > >> > I use SIP 4.11.1 and PyQt4 4.7.6. > >> > > >> > $ python3.1 -c 'import PyQt4.uic.Compiler' > >> > $ python3.2 -c 'import PyQt4.uic.Compiler' > >> > Traceback (most recent call last): > >> > File > >> > > "/usr/lib64/python3.2/site-packages/PyQt4/uic/Compiler/proxy_type.py", > >> > line 16, in __getattribute__ > >> > return type.__getattribute__(cls, name) > >> > AttributeError: type object 'ProxyBase' has no attribute 'module' > >> > > >> > During handling of the above exception, another exception occurred: > >> > > >> > Traceback (most recent call last): > >> > File "<string>", line 1, in <module> > >> > File "/usr/lib64/python3.2/site-packages/PyQt4/uic/__init__.py", > line > >> 3, > >> > in <module> > >> > from PyQt4.uic.Compiler import indenter, compiler > >> > File > >> > > "/usr/lib64/python3.2/site-packages/PyQt4/uic/Compiler/compiler.py", > >> line > >> > 5, in <module> > >> > from PyQt4.uic.Compiler import qtproxies > >> > File > >> > > "/usr/lib64/python3.2/site-packages/PyQt4/uic/Compiler/qtproxies.py", > >> > line 8, in <module> > >> > from PyQt4.uic.port_v3.proxy_base import ProxyBase > >> > File > >> > > "/usr/lib64/python3.2/site-packages/PyQt4/uic/port_v3/proxy_base.py", > >> > line 4, in <module> > >> > class ProxyBase(metaclass=ProxyType): > >> > File > >> > > "/usr/lib64/python3.2/site-packages/PyQt4/uic/Compiler/proxy_type.py", > >> > line 11, in __init__ > >> > if not hasattr(args[0], "module"): > >> > File > >> > > "/usr/lib64/python3.2/site-packages/PyQt4/uic/Compiler/proxy_type.py", > >> > line 19, in __getattribute__ > >> > from PyQt4.uic.Compiler.qtproxies import LiteralProxyClass > >> > ImportError: cannot import name LiteralProxyClass > >> > >> This looks like a Python 3.2a2 bug. > > > > If it's really a bug in Python, and not another intentional, > incompatible > > change, > > then could you report it to http://bugs.python.org/ ? > > (I use snapshots of Python, updated at least once per week, not 3.2a2.) > > It disappears if you add a str(cls) just before the import statement which > suggests it's a bug rather than a change. However I don't have enough > information to put together a proper bug report.
It's not a bug in Python 3.2 :) . http://docs.python.org/dev/py3k/whatsnew/3.2.html: "The hasattr() function used to catch and suppress any Exception. Now, it only catches AttributeError. Under the hood, hasattr() works by calling getattr() and throwing away the results. This is necessary because dynamic attribute creation is possible using __getattribute__() or __getattr__(). If hasattr() were to just scan instance and class dictionaries it would miss the dynamic methods and make it difficult to implement proxy objects." The attached patch changes ImportError into AttributeError, which fixes 'import PyQt4.uic.Compiler'. -- Arfrever Frehtes Taifersar Arahesis
--- pyuic/uic/Compiler/proxy_type.py +++ pyuic/uic/Compiler/proxy_type.py @@ -10,17 +10,20 @@ if not hasattr(args[0], "module"): args[0].module = "" - + def __getattribute__(cls, name): try: return type.__getattribute__(cls, name) except AttributeError: # Avoid a circular import. - from PyQt4.uic.Compiler.qtproxies import LiteralProxyClass + try: + from PyQt4.uic.Compiler.qtproxies import LiteralProxyClass + except ImportError: + raise AttributeError return type(name, (LiteralProxyClass, ), {"module": moduleMember(type.__getattribute__(cls, "module"), - type.__getattribute__(cls, "__name__"))}) + type.__getattribute__(cls, "__name__"))}) def __str__(cls): return moduleMember(type.__getattribute__(cls, "module"),
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt