electrum
electrum copied to clipboard
ValueError: Single '}' encountered in format string
Crash Report
This crash report was reported through the automatic crash reporting system 🤖
Traceback
Traceback (most recent call last):
File "/home/user/wspace/electrum/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/Electrum/kivy/base.py", line 347, in mainloop
File "/home/user/wspace/electrum/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/Electrum/kivy/base.py", line 391, in idle
File "/home/user/wspace/electrum/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/Electrum/kivy/base.py", line 342, in dispatch_input
File "/home/user/wspace/electrum/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/Electrum/kivy/base.py", line 308, in post_dispatch_input
File "kivy/_event.pyx", line 724, in kivy._event.EventDispatcher.dispatch
File "/home/user/wspace/electrum/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/Electrum/kivy/uix/behaviors/button.py", line 179, in on_touch_up
File "kivy/_event.pyx", line 720, in kivy._event.EventDispatcher.dispatch
File "kivy/_event.pyx", line 1263, in kivy._event.EventObservers.dispatch
File "kivy/_event.pyx", line 1147, in kivy._event.EventObservers._dispatch
File "/home/user/wspace/electrum/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/Electrum/kivy/lang/builder.py", line 57, in custom_callback
File "<string>", line 85, in <module>
File "/home/user/wspace/electrum/.buildozer/android/app/electrum/gui/kivy/uix/dialogs/password_dialog.py", line 288, in on_password
ValueError: Single '}' encountered in format string
ValueError: Single '}' encountered in format string
Reporter
This issue was reported by 2 user(s):
| Electrum Version | Python Version | Operating System | Wallet Type | Locale | Stack |
|---|---|---|---|---|---|
| 4.3.3 | 3.8.15 (default, Jan 2 2023, 15:35:37) [Clang 11.0.5 (https://android.googlesource.com/toolchain/llvm-project 87f1315d | Android 9 on ZTE P932F50 (GEN_UA_1_A3_2020_V1.2) | standard | en_US | ℹ |
| 4.3.4 | 3.8.15 (default, Jan 26 2023, 15:17:59) [Clang 11.0.5 (https://android.googlesource.com/toolchain/llvm-project 87f1315d | Android 9 on HUAWEI HWINE (INE-LX1 9.1.0.317(C432E1R1P1)) | imported | en_US | ℹ |
Additional Information
The reporting user(s) did not provide additional information.
it is really difficult for me to imagine that a user would have compiled his own APK after corrupting that line of the code. there must be a deeper issue with python-for-android..
It could be due to bad translations, similar to https://github.com/spesmilo/electrum/issues/3237
https://github.com/spesmilo/electrum/blob/9ea705dadce0d324f86616c3101752dde26a24b5/electrum/gui/kivy/uix/dialogs/password_dialog.py#L288
>>> "asdasd } asdasd".format(2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Single '}' encountered in format string
but all the translation strings look ok to me:
electrum-locale$ git log -n 1
commit 4941c1a92925f198cb0e8d4334692a09917ffc20 (HEAD -> master, origin/master, origin/HEAD)
Author: SomberNight <[email protected]>
Date: Mon Jan 2 15:29:44 2023 +0000
update translations
electrum-locale$ grep -rnw . -e "Password is too short (min " -A1
./locale/sl_SI/electrum.po:4260:msgid "Password is too short (min {} characters)"
./locale/sl_SI/electrum.po-4261-msgstr ""
--
./locale/sr_CS/electrum.po:4260:msgid "Password is too short (min {} characters)"
./locale/sr_CS/electrum.po-4261-msgstr ""
--
./locale/fa_IR/electrum.po:4265:msgid "Password is too short (min {} characters)"
./locale/fa_IR/electrum.po-4266-msgstr ""
--
./locale/be_BY/electrum.po:4260:msgid "Password is too short (min {} characters)"
./locale/be_BY/electrum.po-4261-msgstr ""
--
./locale/es_ES/electrum.po:4280:msgid "Password is too short (min {} characters)"
./locale/es_ES/electrum.po-4281-msgstr "Contraseña muy corta (mínimo {} caracteres)"
--
./locale/cs_CZ/electrum.po:4271:msgid "Password is too short (min {} characters)"
./locale/cs_CZ/electrum.po-4272-msgstr "Heslo je příliš krátké (minimum je {} znaků)"
--
./locale/el_GR/electrum.po:4260:msgid "Password is too short (min {} characters)"
./locale/el_GR/electrum.po-4261-msgstr ""
--
./locale/pl_PL/electrum.po:4263:msgid "Password is too short (min {} characters)"
./locale/pl_PL/electrum.po-4264-msgstr ""
--
./locale/ru_RU/electrum.po:4270:msgid "Password is too short (min {} characters)"
./locale/ru_RU/electrum.po-4271-msgstr "Пароль слишком короткий (минимум {} символов)"
--
./locale/ar_SA/electrum.po:4262:msgid "Password is too short (min {} characters)"
./locale/ar_SA/electrum.po-4263-msgstr ""
--
./locale/uk_UA/electrum.po:4269:msgid "Password is too short (min {} characters)"
./locale/uk_UA/electrum.po-4270-msgstr "Пароль закороткий (не більше {} знаків}"
--
./locale/hu_HU/electrum.po:4268:msgid "Password is too short (min {} characters)"
./locale/hu_HU/electrum.po-4269-msgstr ""
--
./locale/th_TH/electrum.po:4264:msgid "Password is too short (min {} characters)"
./locale/th_TH/electrum.po-4265-msgstr ""
--
./locale/fr_FR/electrum.po:4267:msgid "Password is too short (min {} characters)"
./locale/fr_FR/electrum.po-4268-msgstr ""
--
./locale/ja_JP/electrum.po:4271:msgid "Password is too short (min {} characters)"
./locale/ja_JP/electrum.po-4272-msgstr "パスワードが短すぎます ({}文字以上が必要です)"
--
./locale/nb_NO/electrum.po:4261:msgid "Password is too short (min {} characters)"
./locale/nb_NO/electrum.po-4262-msgstr ""
--
./locale/hy_AM/electrum.po:4260:msgid "Password is too short (min {} characters)"
./locale/hy_AM/electrum.po-4261-msgstr ""
--
./locale/bn_BD/electrum.po:4260:msgid "Password is too short (min {} characters)"
./locale/bn_BD/electrum.po-4261-msgstr ""
--
./locale/ko_KR/electrum.po:4261:msgid "Password is too short (min {} characters)"
./locale/ko_KR/electrum.po-4262-msgstr ""
--
./locale/bg_BG/electrum.po:4260:msgid "Password is too short (min {} characters)"
./locale/bg_BG/electrum.po-4261-msgstr ""
--
./locale/de_DE/electrum.po:4270:msgid "Password is too short (min {} characters)"
./locale/de_DE/electrum.po-4271-msgstr "Passwort ist zu kurz (mindestens {} Zeichen)"
--
./locale/pt_PT/electrum.po:4261:msgid "Password is too short (min {} characters)"
./locale/pt_PT/electrum.po-4262-msgstr ""
--
./locale/sv_SE/electrum.po:4261:msgid "Password is too short (min {} characters)"
./locale/sv_SE/electrum.po-4262-msgstr ""
--
./locale/sk_SK/electrum.po:4269:msgid "Password is too short (min {} characters)"
./locale/sk_SK/electrum.po-4270-msgstr "Heslo je príliš krátké (minimum je {} znakov)"
--
./locale/id_ID/electrum.po:4263:msgid "Password is too short (min {} characters)"
./locale/id_ID/electrum.po-4264-msgstr ""
--
./locale/da_DK/electrum.po:4260:msgid "Password is too short (min {} characters)"
./locale/da_DK/electrum.po-4261-msgstr ""
--
./locale/pt_BR/electrum.po:4271:msgid "Password is too short (min {} characters)"
./locale/pt_BR/electrum.po-4272-msgstr "A senha é muito curta (o mínimo é de {} caracteres)"
--
./locale/ro_RO/electrum.po:4260:msgid "Password is too short (min {} characters)"
./locale/ro_RO/electrum.po-4261-msgstr ""
--
./locale/si_LK/electrum.po:4271:msgid "Password is too short (min {} characters)"
./locale/si_LK/electrum.po-4272-msgstr "මුරපදය කෙටි වැඩියි (අවම අක්ෂර {}ක්)"
--
./locale/zh_CN/electrum.po:4271:msgid "Password is too short (min {} characters)"
./locale/zh_CN/electrum.po-4272-msgstr "密码太短(至少{}个字符)"
--
./locale/zh_TW/electrum.po:4262:msgid "Password is too short (min {} characters)"
./locale/zh_TW/electrum.po-4263-msgstr ""
--
./locale/eo_UY/electrum.po:4260:msgid "Password is too short (min {} characters)"
./locale/eo_UY/electrum.po-4261-msgstr ""
--
./locale/it_IT/electrum.po:4271:msgid "Password is too short (min {} characters)"
./locale/it_IT/electrum.po-4272-msgstr "La password è troppo corta (minimo {} caratteri)"
--
./locale/ky_KG/electrum.po:4260:msgid "Password is too short (min {} characters)"
./locale/ky_KG/electrum.po-4261-msgstr ""
--
./locale/lv_LV/electrum.po:4261:msgid "Password is too short (min {} characters)"
./locale/lv_LV/electrum.po-4262-msgstr "Parole ir par īsu (vismaz {} rakstzīmes)"
--
./locale/he_IL/electrum.po:4270:msgid "Password is too short (min {} characters)"
./locale/he_IL/electrum.po-4271-msgstr "סיסמה קצרה מדי (לפחות {} אותיות)"
--
./locale/nl_NL/electrum.po:4269:msgid "Password is too short (min {} characters)"
./locale/nl_NL/electrum.po-4270-msgstr "Wachtwoord is te kort (min. {} tekens)"
--
./locale/ta_IN/electrum.po:4260:msgid "Password is too short (min {} characters)"
./locale/ta_IN/electrum.po-4261-msgstr ""
--
./locale/tr_TR/electrum.po:4261:msgid "Password is too short (min {} characters)"
./locale/tr_TR/electrum.po-4262-msgstr ""
--
./locale/vi_VN/electrum.po:4260:msgid "Password is too short (min {} characters)"
./locale/vi_VN/electrum.po-4261-msgstr ""
ah indeed. good point
Still, since we don't test all the translations on release, it might be a good idea to handle exceptions in the _() call. One notable scenario is when we reduce the number of placeholders in the original string, any unmaintained translation still having too many placeholders will throw an exception..
s = "{} is a {}"
s.format(6)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: Replacement index 1 out of range for positional args tuple
--
We could also expand def _(message) to do the string formatting with parameters.
E.g. auto string.format() the *args
Also, we could use the **kwargs to control the translation (e.g. plural forms)
So
_('Password is too short (min {} characters)').format(6)
would become
_('Password is too short (min {} characters)', 6)
Or a plural variant
_('Password is too short (min {} character)', 6, plural='Password is too short (min {} characters)')
..which could be plugged into the gettext.ngettext function