Django:我的观点进入了Try部分,也进入了Except部分?

2024-06-13 09:39:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个视图,根据我的打印,输入了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})

Tags: sampleinobjectsobjectrequestcounteritemsitem
2条回答

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

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

所以你得到了try:的第一部分,然后是except:。未到达try:末尾的代码

您的try:部分非常长,您有一个所谓的“bare except”:您不说要捕获哪些异常。这两个都不是一个好主意,最好有一个简短的try部分(这样您就可以确切地知道哪一行可能抛出异常),然后准确地捕获您期望的异常,而不捕获其他异常。否则,意外的异常将在您没有注意到的情况下发生,因为它们被except:块静音

相关问题 更多 >