2017-05-12 75 views
0

我通過網絡發送和接收不同的對象。在我的應用程序中,服務器可以接收一個泡菜或一個字符串。有什麼方法可以知道我得到的數據是鹹菜還是字符串?Python中的Pickle,如何檢查變量是字符串還是pickle?

我想:

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

此外,它可以讓人們執行任意的Python代碼,比如'__import __('os')。system('email my data to Nigeria')',如果它們能夠正確地影響消息的內容的話。 – user2357112

+0

這就是泡菜的問題,無論何時加載數據時都是如此,而不僅僅是在這裏。 – garg10may

相關問題