[PyKDE] QString -> python string via QString::latin1()
Nigel Stewart
ns at fluent.com
Thu Oct 6 22:05:41 BST 2005
Hi Phil,
I certainly see what you mean, the counter-argument
here is motivated from a pragmatic point of view -
I don't want to be writing Python code to check
the return type of every call to QString::latin1().
>>Overall, a bug, or a feature?
>
> Feature.
>
>>I would certainly
>>prefer that PyQt always returned a python string,
>>treating QString::isNull() and QString::isEmpty()
>>as the same case.
>
> Null and empty QStrings are different and the PyQt behaviour reflects the Qt
> behaviour.
True, that's the QString convention. I am not aware of
such a convention existing in Python for python strings.
It could be argued that the PyQt behaviour is escalating
a fine-grained QString semantic into a Python error-state:
PyObject *PyString_FromString(const char *v)
Return value: New reference.
Returns a new string object with the value v
on success, and NULL on failure. The parameter
v must not be NULL; it will not be checked.
So a QString.latin1() returning NULL (which is not documented
as an error condition) is treated by PyQt as an error
condition, rather than converting into a zero-length Python
string.
>>I'm interested in the broader
>>PyKde/PyQt opinion, is it "pythonic" to return
>>different types of objects, depending on the
>>input?
>
> str() is defined to return a string object. If there is a bug then it's that
> str() of a null string should raise an exception. I'd be willing to implement
> that for PyQt4
I think it would be preferable for the QString::isNull /
QString::isEmpty semantic to be ignored - if the python
side is interested in isNull/isEmpty it should be asking
the QString.
It seems to me quite a burden to need to check the return
type of every call to QString::latin1() via PyQt. Raising
an exception would be even more cumbersome, from the point
of view of delivering robust python code.
As it turns out, we can migrate to using str() or unicode()
rather than latin1() - so I'm flagging this as an issue we
came across, not something that affects our project adversly.
Nigel
More information about the PyQt
mailing list