首页 > 解决方案 > 尝试 except 在函数内部不起作用,但在外部起作用

问题描述

try except 作为 DRY 的一部分,我试图将块放在我的函数之外。如果我将它直接放入函数中它可以工作

@api_view(["GET", "POST"])
def user_info(request):
    if request.method == "GET":
        username = request.GET.get("username")
        password = request.GET.get("password")

    try:
        Account.objects.get(username=username, password=password)
    except Account.DoesNotExist:
        return JsonResponse({
            "success": "false",
            "error_code": "1",
        })

但如果我让它发挥作用user_check,它就不起作用

@api_view(["GET", "POST"])
def user_info(request):
    if request.method == "GET":
        username = request.GET.get("username")
        password = request.GET.get("password")

        user_check(username,password)
def user_check(username,password):
    try:
        Account.objects.get(username=username, password=password)
    except Account.DoesNotExist:
        return JsonResponse({
            "success": "false",
            "error_code": "1",
        })

标签: pythondjangodjango-rest-frameworktry-catch

解决方案


也从 try 块返回。喜欢:

def user_check(username,password):
    try:
        Account.objects.get(username=username, password=password)
        # Add this line
        return True
    except Account.DoesNotExist:
        return JsonResponse({
            "success": "false",
            "error_code": "1",
        })

而且,您的功能可能是:

@api_view(["GET", "POST"])
def user_info(request):
    if request.method == "GET":
        username = request.GET.get("username")
        password = request.GET.get("password")

        data = user_check(username, password)
        if data==True:
            # executed from try block known

推荐阅读