2017-05-12 3 views
0

Ich sende und erhalte verschiedene Objekte über das Netzwerk. In meiner Anwendung kann der Server eine Beize oder einen String erhalten. Gibt es eine Möglichkeit zu wissen, ob die Daten, die ich bekommen habe, die Gurke oder eine Schnur sind?Pickle in Python, wie überprüft man, ob die Variable eine Zeichenfolge oder eine Gurke ist?

Ich habe versucht:

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) 

Aber der Ausgang ist nicht hilfreich, es zeigt:

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

So scheint es, es die Gurke und die Zeichenfolge gleich behandelt. Irgendwelche Ideen?

+1

Eine Beize ist ein Bündel von Binärdaten als Zeichenfolge. –

+0

Ändern Sie Ihr Datenformat, um weniger mehrdeutig zu sein. – user2357112

+0

Pickle beginnt mit einem bestimmten Protokoll und Versionstag. Aber viel sinnvoller - notieren Sie Ihre Daten, damit der Empfänger weiß, ob sie eine Essiggurke, eine Schnur oder eine Gurke erhielten. – pvg

Antwort

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

Dies gibt falsche Positive für jede Zeichenfolge, die wie eine Gurke aussieht, aber nicht dazu gedacht war. Zum Beispiel "N.". – user2357112

+1

Außerdem können Personen beliebigen Python-Code ausführen, wie zum Beispiel "__import __ ('os'). System ('email my data to Nigeria')', wenn sie den Inhalt der Nachricht genau richtig beeinflussen können. – user2357112

+0

Das ist die Frage der Gurke, wann immer Sie die Daten laden, wäre es der Fall, nicht nur hier. – garg10may

Verwandte Themen