<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">On 03/06/2014 11:46 PM, Crístian Viana
wrote:<br>
</div>
<blockquote cite="mid:5318985B.7000600@linux.vnet.ibm.com"
type="cite">
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
Am 06-03-2014 12:12, schrieb Sheldon:<br>
<blockquote cite="mid:5318907A.1070406@linux.vnet.ibm.com"
type="cite">
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
AFAK, seems two types has no string representation, one is
unicode and another is object derived from nothing.<br>
</blockquote>
The statement <tt>if not isinstance(value, unicode)</tt>, which
is in the sample code above, makes sure that we will not try to
convert a unicode object to string (only those who have a
different type).<br>
<br>
And an object derived from nothing also has a string
representation. Take a look at this example:<br>
<br>
<tt>>>> class X():</tt><tt><br>
</tt><tt>... def x(self):</tt><tt><br>
</tt><tt>... pass</tt><tt><br>
</tt><tt>... </tt><tt><br>
</tt><tt>>>> a = X()</tt><tt><br>
</tt><tt>>>> print str(a)</tt><tt><br>
</tt><tt><__main__.X instance at 0x7f8fe13d4b00></tt><tt><br>
</tt><tt>>>> print "this is a string: %s." % a</tt><tt><br>
</tt><tt>this is a string: <__main__.X instance at
0x7f8fe13d4b00>.</tt><br>
</blockquote>
<br>
You forgot one. The a follow string format will also do string
representation.<br>
<br>
In [2]: class a(): pass<br>
In [9]: def toU1(value):<br>
...: if not isinstance(value, unicode):<br>
...: value = unicode(str(value), 'utf-8')<br>
...: return u"fǒǒ = %s" % value<br>
...: <br>
<br>
In [10]: def toU2(value):<br>
....: if isinstance(value, str):<br>
....: value = unicode(str(value), 'utf-8')<br>
....: return u"fǒǒ = %s" % value<br>
....: <br>
<br>
In [11]: print toU1(a)<br>
fǒǒ = __main__.a<br>
<br>
In [12]: print toU2(a)<br>
fǒǒ = __main__.a<br>
<br>
In [13]: print toU1("fǒǒ")<br>
fǒǒ = fǒǒ<br>
<br>
In [14]: print toU2("fǒǒ")<br>
fǒǒ = fǒǒ<br>
<br>
In [15]: print toU1(u"fǒǒ")<br>
fǒǒ = fǒǒ<br>
<br>
In [16]: print toU2(u"fǒǒ")<br>
fǒǒ = fǒǒ<br>
<br>
<br>
if one developer define a class like this, it should tell the ptyhon
this a unicode file. <br>
In [17]: class afǒǒ(): pass<br>
We have discuss this problem before, kimchi do not like this. <br>
<br>
In this case, ptyhon take a string are unicode, it should OK.<br>
Not try.<br>
<br>
<br>
<blockquote cite="mid:5318985B.7000600@linux.vnet.ibm.com"
type="cite"> <br>
<blockquote cite="mid:5318907A.1070406@linux.vnet.ibm.com"
type="cite">But I'm not worry about it.<br>
IMO, no one will not pass this instance of object to
KimchiException as args.<br>
</blockquote>
IMO, we should never trust that the users/developers will pass the
correct parameters to our code. Eventually, someone will forget
that, and then we will have one more bug ;)<br>
</blockquote>
your example make me do not need to worry about this. <br>
<br>
<tt>>>> class X():</tt><tt><br>
</tt><tt>... def x(self):</tt><tt><br>
</tt><tt>... pass</tt><tt><br>
</tt><tt>... </tt><tt><br>
</tt><tt>>>> a = X()</tt><tt><br>
</tt><tt>>>> print str(a)</tt><tt><br>
</tt><tt><__main__.X instance at 0x7f8fe13d4b00></tt><tt><br>
</tt><tt>>>> print "this is a string: %s." % a</tt><tt><br>
</tt><tt>this is a string: <__main__.X instance at
0x7f8fe13d4b00>.</tt><br>
<br>
In [20]: print a<br>
<__main__.X instance at 0x206c440><br>
<br>
In [21]: print u"%s" % a<br>
<__main__.X instance at 0x206c440><br>
<br>
<pre class="moz-signature" cols="72">--
Thanks and best regards!
Sheldon Feng(冯少合)<a class="moz-txt-link-rfc2396E" href="mailto:shaohef@linux.vnet.ibm.com"><shaohef@linux.vnet.ibm.com></a>
IBM Linux Technology Center</pre>
</body>
</html>