From: Updike, C. <Cla...@jh...> - 2003-09-18 12:23:46
|
I believe you should be using types.StringType (no 's' on the end): Jython 2.1 on java1.3.1_01 (JIT: null) Type "copyright", "credits" or "license" for more information. >>> import types.StringType >>> isinstance("imastring",types.StringType) 1 -Clark -----Original Message----- From: marco [mailto:ma...@mo...] Sent: Thursday, September 18, 2003 5:25 AM To: jyt...@li... Subject: [Jython-users] problems with types.StringTypes hi there, i have download Jython 2.2a0 from jython home page. is there a known problem with types.StringTypes ? here the code: import types x="m" if isinstance(x, types.StringTypes): print "is a string" get the following error: Traceback (innermost last): File "<console>", line 1, in ? TypeError: isinstance(): 2nd arg is not a class regards marco ------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf _______________________________________________ Jython-users mailing list Jyt...@li... https://lists.sourceforge.net/lists/listinfo/jython-users |
From: Alan K. <jyt...@xh...> - 2003-09-18 14:44:10
|
[marco] > i have download Jython 2.2a0 from jython home page. > is there a known problem with types.StringTypes ? > import types > x="m" > if isinstance(x, types.StringTypes): > print "is a string" > > get the following error: > > Traceback (innermost last): > File "<console>", line 1, in ? > TypeError: isinstance(): 2nd arg is not a class [Clark Updike] > I believe you should be using types.StringType (no 's' on the end): > > Jython 2.1 on java1.3.1_01 (JIT: null) > Type "copyright", "credits" or "license" for more information. > >>> import types.StringType > >>> isinstance("imastring",types.StringType) > 1 But the problem is that types.StringType doesn't cover types.UnicodeType, which only exists in Cpython. I can see where the problem arises: under Java, every string is a Unicode string. So using types.StringType will always work in Jython, for any string. But that isn't true in CPython. To check for a string in CPython, you have to use types.StringTypes, as the OP is trying to do, and which checks for [types.StringType, types.UnicodeType]. If the code was only going to be run under one or the other (i.e. CPython or Jython), then simply use the relevant test. But the code is to run under both Cpython and Jython, then I think that it is probably best for Jython to support types.StringTypes (with the extra 's'), for explicit compatibility with CPython. Here is a Google Groups thread discussing this subject, in CPython. http://tinyurl.com/nteb Regards, Alan. |
From: Alan K. <jyt...@xh...> - 2003-09-19 20:14:06
|
Alan Kennedy wrote: > But the problem is that types.StringType doesn't cover > types.UnicodeType, which only exists in Cpython. > ... if the code is > to run under both Cpython and Jython, then I think that it is probably > best for Jython to support types.StringTypes (with the extra 's'), for > explicit compatibility with CPython. It only occurred to me later that a simple solution to this problem, under Jython, is as follows #=- Jython 2.1 on java1.4.2 (JIT: null) Type "copyright", "credits" or "license" for more information. >>> import types >>> if not hasattr(types, 'StringTypes'): ... types.UnicodeType = types.StringTypes = types.StringType ... >>> if isinstance('test', types.StringTypes): ... print "It's a string" ... It's a string >>> if isinstance(u'test', types.StringTypes): ... print "It's a string" ... It's a string >>> #=- I can't see anything wrong with this. Anyone else? Regards, Alan. |
From: marco <ma...@mo...> - 2003-09-22 07:37:32
|
Am Freitag, 19. September 2003 11:37 schrieb Alan Kennedy: > Alan Kennedy wrote: > > But the problem is that types.StringType doesn't cover > > types.UnicodeType, which only exists in Cpython. > > > > ... if the code is > > to run under both Cpython and Jython, then I think that it is probably > > best for Jython to support types.StringTypes (with the extra 's'), for > > explicit compatibility with CPython. > > It only occurred to me later that a simple solution to this problem, > under Jython, is as follows > > #=3D- > > Jython 2.1 on java1.4.2 (JIT: null) > Type "copyright", "credits" or "license" for more information. > > >>> import types > >>> if not hasattr(types, 'StringTypes'): > > ... types.UnicodeType =3D types.StringTypes =3D types.StringType > ... > > >>> if isinstance('test', types.StringTypes): > > ... print "It's a string" > ... > It's a string > > >>> if isinstance(u'test', types.StringTypes): > > ... print "It's a string" > ... > It's a string > > > #=3D- > > I can't see anything wrong with this. Anyone else? > > Regards, > > Alan. > hello alen, the problem is not in jython 2.1, because jython 2.1 has not the types.StringTypes. but in jython and cpython 2.2 is this implemented. =2D--> xxxxx Jython 2.2a0 on java1.4.0-rc (JIT: null) Type "copyright", "credits" or "license" for more information. >>> import types >>> print types.StringTypes [<jclass org.python.core.PyString at 8075231>] for example in the standard-lib ConfigParser.py in line 226 ( ConfigParser.read() ) it is used. that's the problem. log4py use this class. may be the error is in the java-source code: in org/python/modules/types.java is StringTypes defined as: dict.__setitem__("StringTypes", new PyList(new PyObject[] { PyJavaClass.lookup(PyString.class) })); and in org/python/core/__builtin.java is the method public static boolean isinstance(PyObject obj, PyObject cls) implemented. public static boolean isinstance(PyObject obj, PyObject cls) { if (cls instanceof PyClass) { return issubclass(obj.__class__, (PyClass) cls); } if (cls.getClass() =3D=3D PyTuple.class) { for (int i =3D 0; i < cls.__len__(); i++) { if (isinstance(obj, cls.__getitem__(i))) return true; } return false; } else { throw Py.TypeError("isinstance(): 2nd arg is not a class"); } } and print types.StringTypes.__class__ provides org.python.core.PyList i think this is the error. a PyTuple isn't a PyList. regards marco > > > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > Welcome to geek heaven. > http://thinkgeek.com/sf > _______________________________________________ > Jython-users mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-users =2D-=20 ******************************************************* Marco Machmer Phone : +49-2684-9 77 99 0 =46ax : +49-2684-9 77 291 email : mailto:ma...@mo... www : http://www.Marco-Machmer.de Um ein tadelloses Mitglied einer Schafherde sein zu koennen, muss man vor allem ein Schaf sein. Albert Einstein Bitte senden Sie mir keine Word- oder PowerPoint-Anh=E4nge. Siehe http://www.fsf.org/philosophy/no-word-attachments.de.html |