Hi,
When using PyInquirer with python2 I face a problem when the options include non-ascii characters.
Python3 works fine though.
Here is a minimal working example that demonstrates this behaviour.
# -*- coding: utf-8 -*- from __future__ import print_function, unicode_literals from PyInquirer import prompt def main(): choice = 'John’s Pizza' questions = [ { 'type': 'list', 'name': 'pizza', 'message': 'Pizzeria:', 'choices' : [choice] } ] answer = prompt(questions) pizza = answer['pizza'] print('Answer is |' + pizza + '|' ) if __name__ == '__main__': main()
Python3 execution:
❯ python3 encoding-test.py ? Pizzeria: John’s Pizza Answer is |John’s Pizza|
Python2 execution:
❯ python2 encoding-test.py ? Pizzeria: (Use arrow keys) Traceback (most recent call last): File "encoding-test.py", line 20, in <module> main() File "encoding-test.py", line 15, in main answer = prompt(questions) File "/usr/local/lib/python2.7/dist-packages/PyInquirer/prompt.py", line 71, in prompt eventloop=eventloop) File "/usr/local/lib/python2.7/dist-packages/prompt_toolkit/shortcuts.py", line 625, in run_application result = cli.run() File "/usr/local/lib/python2.7/dist-packages/prompt_toolkit/interface.py", line 413, in run self._redraw() File "/usr/local/lib/python2.7/dist-packages/prompt_toolkit/interface.py", line 358, in _redraw self.renderer.render(self, self.layout, is_done=self.is_done) File "/usr/local/lib/python2.7/dist-packages/prompt_toolkit/renderer.py", line 429, in render extended_height=size.rows, File "/usr/local/lib/python2.7/dist-packages/prompt_toolkit/layout/containers.py", line 142, in write_to_screen sizes = self._divide_heigths(cli, write_position) File "/usr/local/lib/python2.7/dist-packages/prompt_toolkit/layout/containers.py", line 177, in _divide_heigths dimensions = [get_dimension_for_child(c, index) for index, c in enumerate(self.children)] File "/usr/local/lib/python2.7/dist-packages/prompt_toolkit/layout/containers.py", line 175, in get_dimension_for_child return c.preferred_height(cli, write_position.width, write_position.extended_height) File "/usr/local/lib/python2.7/dist-packages/prompt_toolkit/layout/containers.py", line 1652, in preferred_height return self.content.preferred_height(cli, width, max_available_height) File "/usr/local/lib/python2.7/dist-packages/prompt_toolkit/layout/containers.py", line 1000, in preferred_height cli, width - total_margin_width, max_available_height, wrap_lines), File "/usr/local/lib/python2.7/dist-packages/prompt_toolkit/layout/controls.py", line 254, in preferred_height content = self.create_content(cli, width, None) File "/usr/local/lib/python2.7/dist-packages/prompt_toolkit/layout/controls.py", line 259, in create_content tokens_with_mouse_handlers = self._get_tokens_cached(cli) File "/usr/local/lib/python2.7/dist-packages/prompt_toolkit/layout/controls.py", line 239, in _get_tokens_cached cli.render_counter, lambda: self.get_tokens(cli)) File "/usr/local/lib/python2.7/dist-packages/prompt_toolkit/cache.py", line 37, in get value = getter_func() File "/usr/local/lib/python2.7/dist-packages/prompt_toolkit/layout/controls.py", line 239, in <lambda> cli.render_counter, lambda: self.get_tokens(cli)) File "/usr/local/lib/python2.7/dist-packages/PyInquirer/prompts/list.py", line 98, in _get_choice_tokens append(i, choice) File "/usr/local/lib/python2.7/dist-packages/PyInquirer/prompts/list.py", line 92, in append tokens.append((T.Selected if selected else T, str(choice[0]), UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 4: ordinal not in range(128)
The apostrophe unicode character is what is breaking the python2 execution.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4