2017-05-12 8 views
0

私はネットワークを通してさまざまなオブジェクトを送受信します。私のアプリケーションでは、サーバーはpickleまたは文字列を受け取ることができます。私が得たデータがピクルスかストリングかを知る方法はありますか?Pythonのピクル、変数が文字列かピクルスかどうかをチェックする方法は?

私が試した:

class C: 
    pass 


if __name__ == "__main__": 

    c = C() 

    data = pickle.dumps(c) 
    key = 'cryptokey' 

    print isinstance(data, basestring) 
    print isinstance(key, basestring) 

    print type(data) 
    print type(key) 

をしかし出力が役に立たない、それは示しています

True 
True 
<type 'str'> 
<type 'str'> 

だから、それはピクルスと文字列と同じ扱いと思われます。何か案は?

+1

ピクルは、バイナリデータを文字列としてまとめたものです。 –

+0

データフォーマットをあいまいにならないように変更してください。 – user2357112

+0

Pickleは特定のプロトコルとバージョンタグで始まります。しかし、はるかに賢明な - レシーバが彼らが得たものがピクルス、文字列またはキュウであるかどうかを知るように、データに注釈を付けます。 – pvg

答えて

0
try: 
    pickle.loads(key) 
    print 'Pickled data' 
except: 
    print 'Not a pickled data' 
+1

これは、ピクルスのように見えるが、それが意図されていない任意の文字列に誤検出を与えます。たとえば、「N」です。 – user2357112

+1

また、右のメッセージの内容に影響を与える可能性がある場合は、 '__import __( 'os')。system( 'my database to Nigeria')'などの任意のPythonコードを実行できます。 – user2357112

+0

これはpickleの問題です。ここでデータをロードするときは、必ずしもそうではありません。 – garg10may

関連する問題