0

文字列が有効なvcardであるかどうかをvobjectで確認する方法は?

トライアンドキャッチを使用した追加の方法または一般的なアプローチはありますか?

今のところ、私は次のようにします:

 try:
            vobj = vobject.readOne(vcard_readable)
 except Exception as e:
            error_message = {
                "valid": False,
                "reason": "Invalid vCard\n{0}".format(e)}

VOBJECT で Unicode を処理するには?

4

2 に答える 2

2

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-08T12:59:44.440 に答える
0
 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)

わかった。私はそれを解決しました。UNICODE (UTF-8) を使用するには、以下vobjectを使用する必要があります。

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'
于 2014-04-08T16:42:22.807 に答える