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)
http://www.cnblogs.com/makexu/

浙公网安备 33010602011771号