Простая инструкция print () завершается ошибкой при печати списка: UnicodeEncodeError: кодек «ascii» не может кодировать символы… - PullRequest
0 голосов
/ 22 октября 2019

У меня есть функция, которая оборачивает другую функцию. (Обернутая функция выполняет ssh-вызов через paramiko, но это, вероятно, здесь не важно.) Обернутая функция, кажется, возвращает список, но когда я пытаюсь распечатать его, код завершается неудачно с UnicodeEncodeError: 'ascii' codec can't encode characters in position 4843-4844: ordinal not in range(128)

Код:

tracelog = sys.stdout

def wrapper(*args, **kwargs):
    global tracelog
    print("Entering my_shell_func()", file=tracelog)
    rval = my_shell_func(*args, **kwargs)
    print("Exited   my_shell_func()", file=tracelog)
    print("  type(rval) =", type(rval), file=tracelog)
    print(rval, file=tracelog)
    return rval

Последний оператор print () завершился неудачно с этой ошибкой:

 Entering my_shell_func()
 Exited   my_shell_func()
   type(rval) = <class 'list'>
 Traceback (most recent call last):
  …
  File "./mytest", line 41, in wrapper
    print(rval, file=tracelog)
  UnicodeEncodeError: 'ascii' codec can't encode characters in position 4843-4844: ordinal not in range(128)

Мне требуется около часа, чтобы добраться до этой точки отказа, поэтому каждый тест проходитзначительная стоимость. Я до сих пор не знаю, что было в этом списке, что сделало print () таким несчастным.

Есть ли способ заставить print () печатать абсолютно все, без вопросов?

Длятеперь я заключил этот последний оператор print () с try:…except: и сообщением «извините, я не могу напечатать вывод этой функции, нажимая на», что расстраивает меня, но не идеально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...