如何使用vobject检查字符串是否有效?
是否有一些额外的方法或一般的方法尝试和捕捉?
就目前而言,我这样做如下:
try:
vobj = vobject.readOne(vcard_readable)
except Exception as e:
error_message = {
"valid": False,
"reason": "Invalid vCard\n{0}".format(e)}如何用VOBJECT?处理unicode
发布于 2014-04-08 12:59:44
当前代码运行良好,但通常不希望捕获Exception,因为这将掩盖代码中的其他错误。例如,如果我将您的代码片段放到一个文件中,然后运行它……我不会收到错误消息,即使我没有导入vobject模块。这是因为这段代码实际上引发了一个NameError
Traceback (most recent call last):
File "foo.py", line 2, in <module>
vobj = vobject.readOne(vcard_readable)
NameError: name 'vobject' is not defined但是因为你抓住了所有的例外,所以你隐藏了它。一种更好的技术是只捕获您期望从vobject模块收到的特定异常,并让其他人正常地渗出。
对于vobject,它引发的所有异常都将是vobject.base.VObjectError的子类,因此下面的代码就足够了:
try:
vobj = vobject.readOne(vcard_readable)
except vobject.base.VObjectError as e:
error_message = {
"valid": False,
"reason": "Invalid vCard\n{0}".format(e)}发布于 2014-04-08 16:42:22
vcard = put.get('vcard')
try:
vcard_readable = base64.decodestring(vcard)
quoted_printable_vcard = quopri.encodestring(vcard_readable)
vobj = vobject.readOne(quoted_printable_vcard)
except UnicodeEncodeError as e: # case of bad encoding
error_message = {
"valid": False,
"reason": "Invalid vCard\n{0}".format(e)}
return HttpResponse(json.dumps(error_message), status=200)
except vobject.base.VObjectError as e2: # case of invalid vcard
error_message = {
"valid": False,
"reason": "Invalid vCard format\n{0}".format(e2)}
return HttpResponse(json.dumps(error_message), status=200)
except:
error_message = {
"valid": False,
"reason": "Invalid vCard."}
return HttpResponse(json.dumps(error_message), status=200)好的。我解决了。要使vobject与UNICODE (UTF-8)一起工作,需要使用:
quoted printable encoding. -下面的例子:
>>> s = "gżegżółka"
>>> s
'g\xc5\xbceg\xc5\xbc\xc3\xb3\xc5\x82ka'
>>> import quopri
>>> quopri.encodestring(s)
'g=C5=BCeg=C5=BC=C3=B3=C5=82ka'https://stackoverflow.com/questions/22936720
复制相似问题