2012-09-16 7 views
5

मेरी स्क्रिप्टिंग पाइथन है और कैसंड्रा डेटा स्टैक्स समुदाय संस्करण है।pycassa TypeError: एक स्ट्र या यूनिकोड, कैसंड्रा डालने में असमर्थ

TypeError: A str or unicode value was expected, but int was received instead (3902503) 

यह एक त्रुटि है जो मुझे कैसंड्रा कॉलम परिवार में डालने का प्रयास करते समय मिल रही है।

कोड की तरह है: "{: मूल्य कुंजी}"

त्रुटि लॉग पता चलता है:

Traceback (most recent call last): 
     File "C:\Users\me\Desktop\pro1\src\pro1.py", line 73, in <module> 
     str("swf"): str("aws") 
     File "c:\Python27\lib\site-packages\pycassa\columnfamily.py", line 969, in insert 
     mut_list = self._make_mutation_list(columns, timestamp, ttl) 
     File "c:\Python27\lib\site-packages\pycassa\columnfamily.py", line 504, in _make_mutation_list 
     columns.iteritems()) 
     File "c:\Python27\lib\site-packages\pycassa\columnfamily.py", line 503, in <lambda> 
     return map(lambda (c, v): Mutation(self._make_cosc(_pack_name(c), _pack_value(v, c), timestamp, ttl)), 
     File "c:\Python27\lib\site-packages\pycassa\columnfamily.py", line 462, in _pack_value 
     return packer(value) 
     File "c:\Python27\lib\site-packages\pycassa\marshal.py", line 231, in pack_bytes 
     % (v.__class__.__name__, str(v))) 
    TypeError: A str or unicode value was expected, but int was received instead (3902503)   

वहाँ लगता है

for x in feed: 
    cf.insert(uuid.uuid4(), x) 

एक्स के रूप में एक सरल सरणी है कुछ मिनट होने के लिए मैं यहाँ याद कर रहा हूं ... ठीक है कि मैं यहां विशेषज्ञों से पूछने के लिए क्यों आया था!

+0

आपका ट्रैस बैक अपने कोड उदाहरण से मेल नहीं खाता; मैं 'str (" swf ") की आंशिक रेखा देखता हूं: str (" aws ")'। –

+0

मैं सहमत हूं, cf.insert() में swf, शीर्षक और वर्णन शामिल है। चूंकि त्रुटि 'swf' के निशान का पता चला है, मैंने सोचा कि इसमें कुछ गड़बड़ है। – yuvrajm

+0

क्या आपने अपना 'मूल्य' दोबारा जांच लिया था? स्पष्ट रूप से कुछ में एक पूर्णांक होता है, स्ट्रिंग नहीं। –

उत्तर

4

सुनिश्चित करें कि आपके मान आपके कॉलम परिवार के प्रकार से मेल खाते हैं। ऐसा लगता है कि आपका कॉलम परिवार या तो बाइट्स टाइप है या इसके साथ कोई प्रकार नहीं है, इसलिए pycassa केवल स्ट्रिंग मान स्वीकार करेगा। आप एक नेस्टेड dict समझ के साथ एक सूची समझ के साथ str के लिए अपने सभी मान मैप कर सकते हैं (उत्तरार्द्ध अजगर 2.7 अप की आवश्यकता है और):

cf.insert(uuid.uuid4(), [{k: str(v) for k, v in d.iteritems()} for d in x]) 
+1

धन्यवाद! यह बात है! यह तुलनित्र प्रकार था जो त्रुटि में था। मैंने इसे एसीआई टाइप में बदल दिया और अब यह काम कर रहा है। अब हालांकि यह बहुत संबंधित नहीं है, लेकिन क्या मैं पूछ सकता हूं कि जब आप पंक्तियों को आरएसएस फ़ीड – yuvrajm

+1

की तरह पंक्तियों को सम्मिलित करने की कोशिश कर रहे हैं तो आप किस तुलनित्र की सिफारिश करते हैं अंतरराष्ट्रीय पाठ (आरएसएस-वितरित पाठ सहित) के लिए जैसे कि मैं एक यूटीएफ 8 टाइप कॉलम का उपयोग करता हूं । –

संबंधित मुद्दे