سؤال

لدي منتج نموذجي

لديها حجم حقلين وألوان من بين الآخرين

colours = models.CharField(blank=True, null=True, max_length=500)
size = models.CharField(blank=True, null=True, max_length=500)

في رأيي لدي

current_product = Product.objects.get(slug=title)
if len(current_product.size) != 0 :
    current_product.size = current_product.size.split(",")

واحصل على هذا الخطأ:

كائن من النوع "nonetype" ليس له لين ()

ما هو nonetype وكيف يمكنني اختبار لذلك؟

هل كانت مفيدة؟

المحلول

NoneType هو النوع الذي None القيمة لديها. تريد تغيير المقتطف الثاني إلى

if current_product.size: # This will evaluate as false if size is None or len(size) == 0.
  blah blah

نصائح أخرى

nonetepe هو pythons null-type، وهذا يعني "لا شيء"، "undefined". لديها قيمة واحدة فقط: "لا شيء". عند إنشاء كائن نموذج جديد، يتم تهيئة سماتها عادة إلى لا شيء، يمكنك التحقق من ذلك بمقارنة:

if someobject.someattr is None:
    # Not set yet

يمكنني بسهولة شرح خطأ Nonetype مع هذا المثال من التعليمات البرمجية الخاطئة:

def test():  
    s = list([1,'',2,3,4,'',5])  
    try:  
        s = s.remove('') # <-- THIS WRONG because it turns s in to a NoneType  
    except:  
        pass  
    print(str(s))  

s.remove() إرجاع لا شيء يعرف أيضا باسم nonetype. الطريقة الصحيحة

def test2()  
    s = list([1,'',2,3,4,'',5])  
    try:  
        s.remove('') # <-- CORRECTED  
    except:  
        pass  
    print(str(s))  

لا أعرف django، لكنني أفترض أن نوعا من orm يشارك عند القيام بذلك:

current_product = Product.objects.get(slug=title)

عند هذه النقطة، يجب عليك دائما التحقق مما إذا كنت لا تحصل على أي شيء ("لا شيء" هو نفسه "NULL" في جافا أو "Nil" في Lisp مع الفرق الدقيق الذي "لا شيء" كائن في بيثون). عادة ما يكون هذا هو الطريقة التي تعرض بها أورامز المحددة الفارغة إلى لغة البرمجة.

تعديل:جي، أنا فقط أرى أنه current_product.size هذا None ليس current_product. وبعد كما قيل، أنا لست على دراية بالشرج Django، ولكن هذا يبدو غريبا مع ذلك: سأتوقع current_product أن تكون None أو size وجود قيمة رقمية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top