24. python urllib quote或者quote_plus 抛出keyError的解决方案

如果用urllib.quote_plus(u'基础')会抛出KeyError异常。:

Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\web.py-0.36-py2.7.egg\web\application.py", line 237, in process
    return self.handle()
  File "C:\Python27\lib\site-packages\web.py-0.36-py2.7.egg\web\application.py", line 228, in handle
    return self._delegate(fn, self.fvars, args)
  File "C:\Python27\lib\site-packages\web.py-0.36-py2.7.egg\web\application.py", line 409, in _delegate
    return handle_class(cls)
  File "C:\Python27\lib\site-packages\web.py-0.36-py2.7.egg\web\application.py", line 385, in handle_class
    return tocall(*args)
  File "E:/outofmemory/svn/web\controllers\code.py", line 255, in GET
    pageUrl = 'http://outofmemory.cn/code-snippet/tagged/' + quote_plus(tag)
  File "C:\Python27\lib\urllib.py", line 1257, in quote_plus
    return quote(s, safe)
  File "C:\Python27\lib\urllib.py", line 1250, in quote
    return ''.join(map(quoter, s))
KeyError: u'\u57fa'

解决方法

 

# 解决办法是将Unicode类型先转换为str类型,然后在执行quote_plus
print urllib.quote_plus(str(u'基础'))

# 函数
def urlencode(val):
    if isinstance(val,unicode):
        return quote_plus(str(val))
    return quote_plus(val)

  

posted @ 2018-12-25 11:29  桃源仙居  阅读(1441)  评论(0)    收藏  举报