The returned value is handled by a QVariant object on the python side: http://pyqt.sourceforge.net/Docs/PyQt4/qvariant.html#toString, basically if the returned object is one of the types handled by QVariant.toString() then it will return the value converted to string if not it will return an empty string. IMO this behavior is good enough for most cases, if we want to return a more complex object it can always be encoded as JSON.