[Kimchi-devel] [PATCH] issue #330: Properly log the error message when login fails

Sheldon shaohef at linux.vnet.ibm.com
Fri Mar 7 00:35:40 UTC 2014


On 03/06/2014 11:46 PM, Crístian Viana wrote:
> Am 06-03-2014 12:12, schrieb Sheldon:
>> AFAK, seems two types has no string representation, one is unicode 
>> and another is object derived from nothing.
> The statement if not isinstance(value, unicode), 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).
>
> And an object derived from nothing also has a string representation. 
> Take a look at this example:
>
> >>> class X():
> ...     def x(self):
> ...             pass
> ...
> >>> a = X()
> >>> print str(a)
> <__main__.X instance at 0x7f8fe13d4b00>
> >>> print "this is a string: %s." % a
> this is a string: <__main__.X instance at 0x7f8fe13d4b00>.

You forgot one. The a follow string format will also do string 
representation.

In [2]: class a(): pass
In [9]: def toU1(value):
    ...:     if not isinstance(value, unicode):
    ...:         value = unicode(str(value), 'utf-8')
    ...:     return u"fo(o( = %s" % value
    ...:

In [10]: def toU2(value):
    ....:     if isinstance(value, str):
    ....:         value = unicode(str(value), 'utf-8')
    ....:     return u"fo(o( = %s" % value
    ....:

In [11]: print toU1(a)
fo(o( = __main__.a

In [12]: print toU2(a)
fo(o( = __main__.a

In [13]: print toU1("fo(o(")
fo(o( = fo(o(

In [14]: print toU2("fo(o(")
fo(o( = fo(o(

In [15]: print toU1(u"fo(o(")
fo(o( = fo(o(

In [16]: print toU2(u"fo(o(")
fo(o( = fo(o(


if one developer define a class like this, it should tell the ptyhon 
this a unicode file.
In [17]: class afo(o((): pass
We have discuss this problem before, kimchi do not like this.

In this case, ptyhon take a string are unicode, it should OK.
Not try.


>
>> But I'm not worry about it.
>> IMO, no one will not pass this instance of object to KimchiException 
>> as args.
> 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 ;)
your example make me do not need to worry about this.

 >>> class X():
...     def x(self):
...             pass
...
 >>> a = X()
 >>> print str(a)
<__main__.X instance at 0x7f8fe13d4b00>
 >>> print "this is a string: %s." % a
this is a string: <__main__.X instance at 0x7f8fe13d4b00>.

In [20]: print a
<__main__.X instance at 0x206c440>

In [21]: print u"%s" % a
<__main__.X instance at 0x206c440>

-- 
Thanks and best regards!

Sheldon Feng(???)<shaohef at linux.vnet.ibm.com>
IBM Linux Technology Center

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ovirt.org/pipermail/kimchi-devel/attachments/20140307/1044373f/attachment.html>


More information about the Kimchi-devel mailing list