"बहुत सारे मानों को अनपैक करने के लिए" अपवाद


116

मैं Django में एक परियोजना पर काम कर रहा हूं और मैंने उपयोगकर्ता प्रोफाइल बनाने के लिए उपयोगकर्ता मॉडल का विस्तार करने का प्रयास करना शुरू कर दिया है।

दुर्भाग्य से, मैं एक समस्या में चला गया हूं: हर बार जब मैं उपयोगकर्ता की प्रोफ़ाइल को टेम्पलेट के अंदर लाने का प्रयास करता हूं (user.get_template.lastIP उदाहरण के लिए), तो मुझे निम्नलिखित त्रुटि मिलती है:

वातावरण:

अनुरोध विधि: प्राप्त करें
अनुरोध URL: http: // localhost: 8000 /
Django संस्करण: 1.1
पायथन संस्करण: 2.6.1

टेम्प्लेट त्रुटि:
टेम्प्लेट /path/to/base.tpl में, लाइन 19 पर त्रुटि
   रेंडर करते समय एक अपवाद पकड़ा: अनपैक करने के लिए बहुत सारे मान

19: नमस्कार, {{user.username}} ({{user.get_profile.rep}})। यह कैसे चल रहा है? लॉग आउट


अपवाद प्रकार: TemplateSyntaxError पर /
अपवाद मान: रेंडर करते समय एक अपवाद पकड़ा: अनपैक करने के लिए बहुत सारे मान

क्या चल रहा है या मैं क्या गलत कर रहा हूँ के रूप में कोई विचार?


3
ज्यादा जानकारी नहीं है। कृपया अपना UserProfile मॉडल पोस्ट करें।
डैनियल रोसमैन

जवाबों:


189

उस अपवाद का मतलब है कि आप एक ट्यूपल को अनपैक करने की कोशिश कर रहे हैं, लेकिन टपल में लक्ष्य चर की संख्या के संबंध में बहुत अधिक मूल्य हैं। उदाहरण के लिए: यह काम, और 1 प्रिंट करता है, फिर 2, फिर 3

def returnATupleWithThreeValues():
    return (1,2,3)
a,b,c = returnATupleWithThreeValues()
print a
print b
print c

लेकिन यह आपकी त्रुटि को बढ़ाता है

def returnATupleWithThreeValues():
    return (1,2,3)
a,b = returnATupleWithThreeValues()
print a
print b

उठाता

Traceback (most recent call last):
  File "c.py", line 3, in ?
    a,b = returnATupleWithThreeValues()
ValueError: too many values to unpack

अब, आपके मामले में ऐसा क्यों होता है, मुझे नहीं पता, लेकिन शायद यह जवाब आपको सही दिशा में ले जाएगा।


1
@Sterfano Borini, मुझे भी इसी तरह की त्रुटि मिल रही है, लेकिन मेरे मामले में, मैं एक स्ट्रिंग बना रहा हूं, obj='{"vendorId": "' + vID +'", "vendorName" :"'+vName+'", "addedDate" : "'+vAddedDate+'","usersList" : "'+ usersList + '," status" : "'+str(vStatus)+'","edit"'+edit+'"}';हालांकि सभी मान स्ट्रिंग हैं, यह मुझे त्रुटि देता है, मैं इसे अजगर पर चला रहा हूं, यह चल रहा है, लेकिन वेब से प्रतिक्रिया लेते समय मुझे यह अपवाद देता है। क्या आप कृपया सुझाव दे सकते हैं कि क्या गलत हो रहा है।
मेगाबाइट्स

किसी के लिए जो अभी भी नहीं मिला है (यानी मुझे) यह वीडियो ठीक उसी बात को समझाता है ... शब्दों और चित्रों के साथ जो मुझे किसी भी तरह समझाते हैं :)
वेस्ले स्मिथ

त्रुटि जरूरी नहीं कि इसका मतलब यह tupleहै कि अनपैक किया जा रहा है। यह किसी भी प्रकार का अनुक्रम हो सकता है। यह किसी भी चलने योग्य प्रकार की अनुमति दे सकता है; मैं हाथ से याद नहीं कर सकता।
jpmc26

20

एक चर में अनपैकिंग का प्रयास करें,

अजगर इसे एक सूची के रूप में संभालेगा,

फिर सूची से अनपैक करें

def returnATupleWithThreeValues():
    return (1,2,3)
a = returnATupleWithThreeValues() # a is a list (1,2,3)
print a[0] # list[0] = 1
print a[1] # list[1] = 2
print a[2] # list[2] = 3

4
किसी को इस पर और अधिक समझा सकते हैं?
सूअर का बच्चा

8

यह समस्या परिचित लग रही थी इसलिए मैंने सोचा कि यदि मैं सीमित मात्रा में सूचनाओं को दोहरा सकता हूं तो मैं देखूंगा।

एक त्वरित खोज जेम्स बेनेट के ब्लॉग में एक प्रविष्टि कर दिया यहाँ जो कहा गया है कि जब UserProfile के साथ काम करने उपयोगकर्ता मॉडल का विस्तार करने के settings.py में एक आम गलती Django इस त्रुटि फेंक कर सकते हैं।

ब्लॉग प्रविष्टि को उद्धृत करने के लिए:

सेटिंग का मान "appname.models.modelname" नहीं है, यह सिर्फ "appname.modelname" है। कारण यह है कि Django इसका उपयोग प्रत्यक्ष आयात करने के लिए नहीं कर रहा है; इसके बजाय, यह एक आंतरिक मॉडल-लोडिंग फ़ंक्शन का उपयोग कर रहा है जो केवल ऐप का नाम और मॉडल का नाम चाहता है। AUTH_PROFILE_MODULE सेटिंग में "appname.models.modelname" या "projectname.appname.models.modelname" जैसी चीजों को करने की कोशिश करने से Django को भयभीत होने के लिए झटका देना पड़ेगा "अनपैक करने के लिए बहुत सारे मान" त्रुटि, इसलिए आप सुनिश्चित करें कि आप कर रहे हैं। AUTH_PROFILE_MODULE के मान में "appname.modelname" डालें, और कुछ नहीं।

यदि ओपी ने ट्रेसबैक की अधिक प्रतिलिपि बनाई थी, तो मुझे उम्मीद है कि नीचे कुछ ऐसा होगा, जिसे मैं अपने AUTH_PROFILE_MODULE सेटिंग में "मॉडल" जोड़कर डुप्लिकेट करने में सक्षम था।

TemplateSyntaxError at /

Caught an exception while rendering: too many values to unpack

Original Traceback (most recent call last):
  File "/home/brandon/Development/DJANGO_VERSIONS/Django-1.0/django/template/debug.py", line 71, in render_node
    result = node.render(context)
  File "/home/brandon/Development/DJANGO_VERSIONS/Django-1.0/django/template/debug.py", line 87, in render
    output = force_unicode(self.filter_expression.resolve(context))
  File "/home/brandon/Development/DJANGO_VERSIONS/Django-1.0/django/template/__init__.py", line 535, in resolve
    obj = self.var.resolve(context)
  File "/home/brandon/Development/DJANGO_VERSIONS/Django-1.0/django/template/__init__.py", line 676, in resolve
    value = self._resolve_lookup(context)
  File "/home/brandon/Development/DJANGO_VERSIONS/Django-1.0/django/template/__init__.py", line 711, in _resolve_lookup
    current = current()
  File "/home/brandon/Development/DJANGO_VERSIONS/Django-1.0/django/contrib/auth/models.py", line 291, in get_profile
    app_label, model_name = settings.AUTH_PROFILE_MODULE.split('.')
ValueError: too many values to unpack

मुझे लगता है कि कुछ मामलों में से एक है जहां Django अभी भी आयात जादू का एक सा है जो एक छोटी सी त्रुटि की उम्मीद अपवाद नहीं फेंकने पर भ्रम पैदा करता है।

आप ट्रेसबैक के अंत में देख सकते हैं कि मैंने कैसे AUTH_PROFILE_MODULE के लिए "appname.modelname" के अलावा किसी अन्य चीज़ का उपयोग करके पोस्ट किया है कि लाइन "app_label, model_name = settings.AsH_PROFILE_MODULE.split ('' ')" "को फेंकने का कारण बनेगी। "बहुत सारे मान अनपैक करने के लिए" त्रुटि।

मुझे 99% यकीन है कि यह मूल समस्या थी जिसका सामना यहाँ किया गया था।


यदि आप नहीं मिला है तो क्या होता है AUTH_PROFILE_MODULEअपने में settings.py?
सेन्थर्थ्स

0

सबसे अधिक संभावना है कि get_profile () कॉल में कहीं न कहीं कोई त्रुटि है। आपके विचार में, अनुरोध ऑब्जेक्ट वापस करने से पहले, इस पंक्ति को रखें:

request.user.get_profile()

इसे त्रुटि को उठाना चाहिए, और आपको एक अधिक विस्तृत ट्रेसबैक देना चाहिए, जिसे आप बाद में डीबग करने के लिए उपयोग कर सकते हैं।


0

यह मेरे लिए तब होता है जब मैं टेम्पलेट्स के लिए जिनजा 2 का उपयोग कर रहा हूं। Django_extensionsrunserver_plus से कमांड का उपयोग करके विकास सर्वर को चलाकर समस्या को हल किया जा सकता है

यह werkzeug डीबगर का उपयोग करता है जो कि बहुत बेहतर होता है और इसमें बहुत अच्छा इंटरैक्टिव डिबगिंग कंसोल होता है। यह किसी भी फ्रेम (कॉल स्टैक में) पर एक अजगर खोल लॉन्च करने के लिए कुछ अजाक्स जादू करता है ताकि आप डिबग कर सकें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.