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?) Pete _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt