TypeError: east_asian_width() argument must be a unicode character, not
Closed this issue · 2 comments
I have "twice" seen this error from dnf on my Fedora 40 system. In the case from the traceback and output below it didn't cause a crash or really any problem. I say "twice", because until I cleaned up the first incident it was easily reproducible. Yet there have been two distinct cases of it on the same system.
A previous time I at the time thought it was an edge case related to the google-cloud-cli
package. That incident caused a huge mess inside my rpm database. Where I had something like 50 packages with duplicate versions. Some of the packages included were systemd
packages and some libraries. I was able to clean up the system manually with a fair amount of work. In the case the traceback looked the same. I removed the google-cloud-cli
package and repository. I hadn't seen the issue since, till today. Both then and now I tried googling the error and didn't find much.
This isn't a edge case where I have a multi-language system, or that I am trying to worth with an asian language in some way.
As far as I can tell this desktop system was originally installed fresh as Fedora 38, and was upgraded from 38 to 39 via dnf system-upgrade
. Then later upgraded again the same way to Fedora 40.
Versions:
dnf-4.21.1-1.fc40.noarch
fedora-release-identity-workstation-40-39.noarch
python3-3.12.6-1.fc40.x86_64
Environment variable:
LANG=en_US.UTF-8
Command used to find duplicates:
rpm -qa --queryformat '%{name}\n' | sort | uniq -c | sort -g | grep -Ev 'kernel|firmware' | grep ' [2-3]'
Traceback:
Traceback (most recent call last):
File "/usr/lib/python3.12/site-packages/dnf/yum/rpmtrans.py", line 294, in callback
self._instProgress(amount, total, key)
File "/usr/lib/python3.12/site-packages/dnf/yum/rpmtrans.py", line 375, in _instProgress
display.progress(pkg, action, amount, total, self.complete_actions, self.total_actions)
File "/usr/lib/python3.12/site-packages/dnf/cli/output.py", line 1999, in progress
self._out_progress(ti_done, ti_total, ts_done, ts_total,
File "/usr/lib/python3.12/site-packages/dnf/cli/output.py", line 2016, in _out_progress
(fmt, wid1, wid2) = self._makefmt(percent, ts_done, ts_total,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/dnf/cli/output.py", line 2040, in _makefmt
pnl = exact_width(pkgname)
^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/dnf/i18n.py", line 179, in exact_width
return sum(_exact_width_char(c) for c in msg)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/dnf/i18n.py", line 179, in <genexpr>
return sum(_exact_width_char(c) for c in msg)
^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/dnf/i18n.py", line 153, in _exact_width_char
return 2 if unicodedata.east_asian_width(uchar) in ('W', 'F') else 1
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: east_asian_width() argument must be a unicode character, not
Full output:
Last metadata expiration check: 0:47:42 ago on Thu 26 Sep 2024 10:27:17 AM MST.
Dependencies resolved.
===============================================================================================================================================================================================================================================
Package Architecture Version Repository Size
===============================================================================================================================================================================================================================================
Installing:
kernel x86_64 6.10.11-200.fc40 updates 177 k
kernel-core x86_64 6.10.11-200.fc40 updates 17 M
kernel-devel x86_64 6.10.11-200.fc40 updates 20 M
kernel-modules x86_64 6.10.11-200.fc40 updates 63 M
kernel-modules-core x86_64 6.10.11-200.fc40 updates 38 M
kernel-modules-extra x86_64 6.10.11-200.fc40 updates 2.9 M
Upgrading:
kernel-devel-matched x86_64 6.10.11-200.fc40 updates 177 k
python3-paramiko noarch 3.5.0-1.fc40 updates 403 k
Removing:
kernel x86_64 6.10.9-200.fc40 @updates 0
kernel-core x86_64 6.10.9-200.fc40 @updates 69 M
kernel-devel x86_64 6.10.9-200.fc40 @updates 71 M
kernel-modules x86_64 6.10.9-200.fc40 @updates 62 M
kernel-modules-core x86_64 6.10.9-200.fc40 @updates 36 M
kernel-modules-extra x86_64 6.10.9-200.fc40 @updates 2.7 M
Transaction Summary
===============================================================================================================================================================================================================================================
Install 6 Packages
Upgrade 2 Packages
Remove 6 Packages
Total download size: 142 M
Is this ok [y/N]: y
Downloading Packages:
(1/8): kernel-6.10.11-200.fc40.x86_64.rpm 291 kB/s | 177 kB 00:00
(2/8): kernel-core-6.10.11-200.fc40.x86_64.rpm 12 MB/s | 17 MB 00:01
(3/8): kernel-devel-6.10.11-200.fc40.x86_64.rpm 13 MB/s | 20 MB 00:01
(4/8): kernel-modules-extra-6.10.11-200.fc40.x86_64.rpm 15 MB/s | 2.9 MB 00:00
(5/8): kernel-devel-matched-6.10.11-200.fc40.x86_64.rpm 1.8 MB/s | 177 kB 00:00
(6/8): python3-paramiko-3.5.0-1.fc40.noarch.rpm 3.6 MB/s | 403 kB 00:00
(7/8): kernel-modules-core-6.10.11-200.fc40.x86_64.rpm 27 MB/s | 38 MB 00:01
(8/8): kernel-modules-6.10.11-200.fc40.x86_64.rpm 25 MB/s | 63 MB 00:02
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 42 MB/s | 142 MB 00:03
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : kernel-modules-core-6.10.11-200.fc40.x86_64 1/16
Installing : kernel-core-6.10.11-200.fc40.x86_64 2/16
Running scriptlet: kernel-core-6.10.11-200.fc40.x86_64 2/16
Installing : kernel-modules-6.10.11-200.fc40.x86_64 3/16
Running scriptlet: kernel-modules-6.10.11-200.fc40.x86_64 3/16
Installing : kernel-devel-6.10.11-200.fc40.x86_64 [================================================= ] 4/16Traceback (most recent call last):
File "/usr/lib/python3.12/site-packages/dnf/yum/rpmtrans.py", line 294, in callback
self._instProgress(amount, total, key)
File "/usr/lib/python3.12/site-packages/dnf/yum/rpmtrans.py", line 375, in _instProgress
display.progress(pkg, action, amount, total, self.complete_actions, self.total_actions)
File "/usr/lib/python3.12/site-packages/dnf/cli/output.py", line 1999, in progress
self._out_progress(ti_done, ti_total, ts_done, ts_total,
File "/usr/lib/python3.12/site-packages/dnf/cli/output.py", line 2016, in _out_progress
(fmt, wid1, wid2) = self._makefmt(percent, ts_done, ts_total,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/dnf/cli/output.py", line 2040, in _makefmt
pnl = exact_width(pkgname)
^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/dnf/i18n.py", line 179, in exact_width
return sum(_exact_width_char(c) for c in msg)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/dnf/i18n.py", line 179, in <genexpr>
return sum(_exact_width_char(c) for c in msg)
^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/dnf/i18n.py", line 153, in _exact_width_char
return 2 if unicodedata.east_asian_width(uchar) in ('W', 'F') else 1
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: east_asian_width() argument must be a unicode character, not
Installing : kernel-devel-6.10.11-200.fc40.x86_64 4/16
Running scriptlet: kernel-devel-6.10.11-200.fc40.x86_64 4/16
Upgrading : kernel-devel-matched-6.10.11-200.fc40.x86_64 5/16
Installing : kernel-6.10.11-200.fc40.x86_64 6/16
Installing : kernel-modules-extra-6.10.11-200.fc40.x86_64 7/16
Running scriptlet: kernel-modules-extra-6.10.11-200.fc40.x86_64 7/16
Upgrading : python3-paramiko-3.5.0-1.fc40.noarch 8/16
Erasing : kernel-modules-extra-6.10.9-200.fc40.x86_64 9/16
Running scriptlet: kernel-modules-extra-6.10.9-200.fc40.x86_64 9/16
Erasing : kernel-6.10.9-200.fc40.x86_64 10/16
Erasing : kernel-modules-6.10.9-200.fc40.x86_64 11/16
Running scriptlet: kernel-modules-6.10.9-200.fc40.x86_64 11/16
Erasing : kernel-modules-core-6.10.9-200.fc40.x86_64 12/16
Running scriptlet: kernel-core-6.10.9-200.fc40.x86_64 13/16
Erasing : kernel-core-6.10.9-200.fc40.x86_64 13/16
Erasing : kernel-devel-6.10.9-200.fc40.x86_64 14/16
Cleanup : python3-paramiko-3.4.0-3.fc40.noarch 15/16
Cleanup : kernel-devel-matched-6.10.10-200.fc40.x86_64 16/16
Running scriptlet: kernel-modules-core-6.10.11-200.fc40.x86_64 16/16
Running scriptlet: kernel-core-6.10.11-200.fc40.x86_64 16/16
Running scriptlet: kernel-modules-6.10.11-200.fc40.x86_64 16/16
Running scriptlet: kernel-devel-matched-6.10.10-200.fc40.x86_64 16/16
Upgraded:
kernel-devel-matched-6.10.11-200.fc40.x86_64 python3-paramiko-3.5.0-1.fc40.noarch
Installed:
kernel-6.10.11-200.fc40.x86_64 kernel-core-6.10.11-200.fc40.x86_64 kernel-devel-6.10.11-200.fc40.x86_64 kernel-modules-6.10.11-200.fc40.x86_64 kernel-modules-core-6.10.11-200.fc40.x86_64 kernel-modules-extra-6.10.11-200.fc40.x86_64
Removed:
kernel-6.10.9-200.fc40.x86_64 kernel-core-6.10.9-200.fc40.x86_64 kernel-devel-6.10.9-200.fc40.x86_64 kernel-modules-6.10.9-200.fc40.x86_64 kernel-modules-core-6.10.9-200.fc40.x86_64 kernel-modules-extra-6.10.9-200.fc40.x86_64
Complete!
It seems that your RPM database contains a broken package name (UTF-8-invalid string) and DNF attempts to print it. Before printing it DNF tries to interpret it as UTF-8 in progress() function with ucd() call and that call fails to provide a valid UTF-8 string.
We would like to know what kind of object is and what content has pkgname
variable in progress()
method in /usr/lib/python3.12/site-packages/dnf/cli/output.py file before line 1993 and after line 1993 when your problem happens. Are you able to debug it?
I think this was a hardware issue. I am closing it.