[PyQt] Unicode attributes of QObjects not raising AttributeError
Phil Thompson
phil at riverbankcomputing.com
Mon Jun 24 18:20:42 BST 2019
On 22/06/2019 20:49, Arusekk wrote:
> Hi!
>
> I just encountered a misguiding error message while using unicode
> identifiers
> that cost me several hours of debugging.
>
> The code to reproduce is as easy as:
>
> >>> from PyQt5.QtCore import QObject
> >>> QObject().ą
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> UnicodeEncodeError: 'ascii' codec can't encode character '\u0105'
> in position 0: ordinal not in range(128)
>
> Whereas the expected behaviour would be like here:
>
> >>> "".ą
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> AttributeError: 'str' object has no attribute 'ą'
>
> The possible solutions to it are (fix1, possibly having negative impact
> elsewhere):
>
> --- sip/QtCore/QtCoremod.sip 2019-05-06 11:03:34.000000000 +0200
> +++ sip/QtCore/QtCoremod.sip.fix0 2019-06-22 20:03:35.190091685
> +0200
> @@ -64,7 +64,7 @@
> %Plugin PyQt5
>
> %If (Py_v3)
> -%DefaultEncoding "ASCII"
> +%DefaultEncoding "UTF-8"
> %End
>
> %If (!Py_v3)
>
> Or the following (fix2, only changing QObject's getattr):
>
> --- sip/QtCore/qobject.sip 2019-05-06 11:03:34.000000000 +0200
> +++ sip/QtCore/qobject.sip.fix2 2019-06-22 20:10:16.075104723 +0200
> @@ -434,7 +434,7 @@
> return qpycore_pyqtconfigure(sipSelf, sipArgs, sipKwds);
> %End
>
> - SIP_PYOBJECT __getattr__(const char *name) const;
> + SIP_PYOBJECT __getattr__(const char *name /Encoding="UTF-8"/)
> const;
> %MethodCode
> sipRes = qpycore_qobject_getattr(sipCpp, sipSelf, a0);
> %End
The second fix will be in tonight's snapshot.
Thanks,
Phil
More information about the PyQt
mailing list