Django:我的视图进入“尝试”部分,另外进入“部分”?

时间:2019-02-06 18:56:29

标签: python django

我有一个视图,根据我的打印,它进入了TryExcept部分。

据我了解,它只应输入Try部分或Except部分,而不能同时输入。

Cart object exist
Lenght in Cart_Items
1
Enters Except PART
55

为什么会这样?

def cart_detail(request, total = 0, counter = 0, cart_items = None):
    try:
        cart = Cart.objects.get(id = request.COOKIES.get("cart_id"))
        if not cart:
            print("No Cart object")
        else:
            print("Cart object exist")
        cart_items = CartItem.objects.filter(cart = cart)
        print("Lenght in Cart_Items")
        print(len(cart_items))
        for cart_item in cart_items:
            total += (cart_item.product.price)

        sample_items = SampleItem.objects.filter(cart=cart)

        for sample_item in sample_items:
            total += (sample_item.sample.price)


        culqi_my_public_key = settings.CULQI_PUBLISHABLE_KEY #Es necesario mandar la llave pública para generar un token
        culqi_total = int(total * 100) #El total para cualqui debe multiplicarse por 100

        categories = Category.objects.exclude(name='Muestras')

        return render(request, 'cart.html', dict(cart_items = cart_items, sample_items = sample_items, total = total, counter = counter,
                                      culqi_total = culqi_total, culqi_my_public_key = culqi_my_public_key,
                                                 categories = categories))
    except:
        print('Enters Except PART')
        print(request.COOKIES.get("cart_id"))
        categories = Category.objects.exclude(name='Muestras')
        return render(request, 'cart.html', {'categories':categories})

2 个答案:

答案 0 :(得分:1)

您的理解是错误的。代码总是进入try:部分,直到引发异常。如果发生这种情况,则except:部分将运行。

因此,您将获得try:的第一部分,然后是except:。未到达try:末尾的代码。

您的try:部分很长,并且您有一个所谓的“ bare-except”:您没有说要捕获哪些异常。两者都不是一个好主意,最好有简短的try-parts(以便您确切地知道哪一行可能引发异常),然后准确地捕获您期望的异常,而别无其他。否则,except:块会将它们静音,从而使您无法注意到意外的异常。

答案 1 :(得分:0)

您的代码将在try块中的print(len(cart_items))语句之后中断,然后进入except块。