【问题标题】:coercing to Unicode: need string or buffer, list found强制转换为 Unicode:需要字符串或缓冲区,找到列表
【发布时间】:2014-10-07 22:25:19
【问题描述】:

我有一个包含以下代码的 django rest 框架视图 -

trgmst_info = request.DATA['trgmst_info'][0]
request_accts = ['request-dev', 'request-qa', 'request-uat', 'request-prod']
request.DATA['trgmst_info'] = [rd.replace(request_accts, settings.REQUEST_ACCT) for rd in request.DATA['trgmst_info']]

request.DATA['trgmst_info'][0]的值如下——

"<eventmon><conn>24</conn><action>3</action><folder/><mailbox>Inbox</mailbox><condition><condcount>1</condcount><criteria1>Sender</criteria1><ctext1>test_MESSage</ctext1><csensitive1>Y</csensitive1></condition><msgbody>Y</msgbody><evtmtrg>Inbox (request-dev@mailserver.blah.com)</evtmtrg></eventmon>"

我要做的是扫描其中一个 request_accts 并将其替换为 settings.REQUEST_ACCT 中的值

一直发生的只是以下错误 -

coercing to Unicode: need string or buffer, list found

Traceback:
File "D:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
  112.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "D:\Python27\lib\site-packages\django\views\generic\base.py" in view
  69.             return self.dispatch(request, *args, **kwargs)
File "D:\Python27\lib\site-packages\django\views\decorators\csrf.py" in wrapped_view
  57.         return view_func(*args, **kwargs)
File "D:\Python27\lib\site-packages\rest_framework\views.py" in dispatch
  400.             response = self.handle_exception(exc)
File "D:\Python27\lib\site-packages\rest_framework\views.py" in dispatch
  397.             response = handler(request, *args, **kwargs)
File "D:\Tidal\API\views.py" in put
  464.                 request.DATA['trgmst_info'] = [rd.replace(request_accts, settings.REQUEST_ACCT) for rd in request.DATA['trgmst_info']]

Exception Type: TypeError at /deploy/event/
Exception Value: coercing to Unicode: need string or buffer, list found

编辑 - 如果我在第一行之后偷偷添加以下代码 -

print trgmst_info

它返回&lt;。如果我将第一行更改为以下 -

trgmst_info = request.DATA['trgmst_info']

打印返回所有内容 -

<eventmon><conn>24</conn><action>3</action><folder/><mailbox>Inbox</mailbox><condition><condcount>1</condcount><criteria1>Sender</criteria1><ctext1>test_MESSage</ctext1><csensitive1>Y</csensitive1></condition><msgbody>Y</msgbody><evtmtrg>Inbox (request-dev@mailserver.blah.com)</evtmtrg></eventmon>

但同样的错误仍然存​​在。

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    string.replace() 使用字符串作为参数而不是列表。 request_accts 是一个列表。

    我不是 django 专家,但也许这会起作用:

    trgmst_info = request.DATA['trgmst_info'][0]
    request_accts = ['request-dev', 'request-qa', 'request-uat', 'request-prod']
    for rep in request_accts:
        request.DATA['trgmst_info'] = [rd.replace(rep, settings.REQUEST_ACCT) for rd in request.DATA['trgmst_info']]
    

    【讨论】:

    • 啊,我看错了帖子。那么如何让它检查列表中提供的每个值的字符串呢?
    猜你喜欢
    • 2014-03-02
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 2017-03-31
    • 2014-05-07
    • 2021-03-28
    • 2015-02-01
    • 2013-11-23
    相关资源
    最近更新 更多