On Wed, 2 Feb 2011 22:25:09 +0100, "Hans-Peter Jansen" <h...@urpla.net> wrote: > On Wednesday 02 February 2011, 22:16:46 Phil Thompson wrote: >> On Wed, 2 Feb 2011 21:33:39 +0100, "Hans-Peter Jansen" >> <h...@urpla.net> >> >> wrote: >> > [Oops, sorry, send too fast] >> > >> > Dear Phil, >> > >> > On Tuesday 01 February 2011, 22:26:43 Hans-Peter Jansen wrote: >> >> Phil, something is badly broken with the current release and the >> >> snapshots. >> > >> > Here's the essence of the issue: >> > >> > class A(object): >> > def __init__(self): >> > # catch access a non existing attribute >> > try: >> > print self.a, type(self.a) >> > except AttributeError: >> > pass >> > >> > a = A() >> > >> > from PyQt4.Qsci import QsciScintilla >> > >> > # derive from a sip wrapped class >> > class B(QsciScintilla): >> > def __init__(self): >> > # access a non existing attribute results in: >> > # TypeError: 'sip.methoddescriptor' object is not callable >> > try: >> > print self.b, type(self.b) >> > except AttributeError: >> > pass >> > >> > b = B() >> > >> > results in: >> > >> > Traceback (most recent call last): >> > File "sipinstance.py", line 22, in <module> >> > b = B() >> > File "sipinstance.py", line 18, in __init__ >> > print self.b, type(self.b) >> > TypeError: 'sip.methoddescriptor' object is not callable >> > >> > Obviously, accessing non existing attributes in classes wrapped by >> > sip causes havoc (an unexpected TypeError). >> > >> > At least for: >> > python: 2.6 >> > sip: 4.12.1 >> > qt4: 4.6.3 >> > pyqt4: snapshot-4.8.4-278054fd857c >> > >> > >> > I was able to fix eric with this diff: >> > >> > --- QScintilla/Editor.py~ 2011-02-02 21:31:20.741149390 +0100 >> > +++ QScintilla/Editor.py 2011-02-02 21:31:30.683988621 +0100 >> > @@ -1258,7 +1258,7 @@ class Editor(QsciScintillaCompat): >> > """ >> > try: >> >> self.supportedEols[self.getLineSeparator()].setChecked(True) >> >> > - except AttributeError: >> > + except (AttributeError, TypeError): >> > pass >> > >> > def __eolChanged(self): >> > >> > Note: self.supportedEols doesn't exist, when this method is called >> > the first >> > time. >> > >> > Guess, it's sip 4.12.2 time ;-) >> > >> > Pete >> >> If I run the code as above I get a "RuntimeError: underlying >> C/C++..." as expected. Adding the missing call to >> QsciScintilla.__init__() (and creating a QApplication at the start) >> then it runs fine (ie. an AttributeError is raised). > > You mean: > > class A(object): > def __init__(self): > # catch access a non existing attribute > try: > print self.a, type(self.a) > except AttributeError: > pass > > a = A() > > from PyQt4 import QtGui > from PyQt4.Qsci import QsciScintilla > > app = QtGui.QApplication([]) > > # derive from a sip wrapped class > class B(QsciScintilla): > def __init__(self): > super(B, self).__init__() > # access a non existing attribute results in: > # TypeError: 'sip.methoddescriptor' object is not callable > try: > print self.b, type(self.b) > except AttributeError: > pass > > b = B() > > > but still: > > Traceback (most recent call last): > File "sipinstance.py", line 28, in <module> > b = B() > File "sipinstance.py", line 24, in __init__ > print self.b, type(self.b) > TypeError: 'sip.methoddescriptor' object is not callable > > It might be a Python version issue? (where I'm on 2.6, and you?)
I've tried it with 2.6, 2.7 and 3.2rc2 - works fine. Phil _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt