Форматирование объектов с помощью строки Unicode и без метода unicode

#python-2.7 #unicode #utf-8

#python-2.7 #юникод #utf-8

Вопрос:

Довольно часто я нахожу свои объекты для самостоятельного ведения журнала, такие как:

 result = call_a_func(XXX)
logger.info(u"I caught an exception {}".format(result))
  

Проблема в том, что если результатом является объект со строкой с символами Юникода (все еще байтовой строкой) и не имеет __unicode__ метода, это приведет к сбою.

пример:

 try:
    # Exception with a unicode encoded in a string with utf-8
    raise Exception("xeaxb5xad")  # Note this is not usually created under my control
except Exception as e:
    return u"I captured: {}".format(e)
  

Каков наилучший способ регистрации объектов, поступающих из внешней библиотеки, где вы не уверены, что сможете преобразовать ее в юникод?

Есть ли что-нибудь лучше, чем передавать его через функцию, например:

 def as_unicode(in_obj):
    try:
        return unicode(in_obj)
    except UnicodeDecodeError:
        return str(in_obj).decode("utf-8")
  

Комментарии:

1. Не совсем. Если код не unicode готов, то с этим ничего нельзя поделать.