我正在尝试将详细日志添加到现有脚本中。此脚本通过soap客户端API将数据提取到字典中。我正在使用日志记录模块和格式化函数来按原样记录这个字典。
在某些情况下,我得到如下的unicode异常,因为一个值可能有非ascii字符,导致异常。
示例参考:
ref = {'Name': 'John', 'Surname': 'Doe', 'MI': None, 'Title': u'\xe2\x80\xa2\tEngineer_I'}
' \ xe2 \ x80 \ xa2 \ tEngineer_I',是.encode(' utf-8')表示通过查询以下返回的值。
目前代码:
logger = logging.getLogger(name)
ref_data = soap_query()
for ref in ref_data:
logger.debug("This is the reference data: {}".format(ref))
错误:
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2022' in position 0: ordinal not in range(128)
回溯
Traceback (most recent call last):
File "stack.py", line 65, in <module>
query_db(db_obj)
File "stack.py", line 50, in query_db
logger.info("This is the reference data: {}".format(ref))
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2022' in position 0: ordinal not in range(128)
解决方法
为了解决这个问题,我写了另一个函数如下:
# Dictionary comprehension to encode all unicode values as ascii and ignore errors
def convert_to_str(ref):
return {k: v.encode('ascii', 'ignore') if v else v for k, v in ref.iteritems()}
有更好的解决方案吗?
这对我有用,但我想知道,如果有更好的方法来处理这个问题? 我可以将任何参数传递给logger或格式化函数以编码为ascii或忽略unicode错误吗?
我正在使用 Python 2.7.6
答案 0 :(得分:0)
您可以使用str()将dict转换为字符串,遵循此代码
logger = logging.getLogger(name)
ref_data = soap_query()
for ref in ref_data:
logger.debug("This is the reference data: {}".format(str(ref)))