장고에서 try - except 구문 질문입니다

인터넷은 검색하면서 챗봇 만들기를 따라하다보니 결국은 장고를 알아야 하는 시점에 이르게 되었습니다.

파이썬도 완벽하게 숙지하지 않은 상태에서 장고를 하려니 좀 어렵습니다.

대략적인 코드의 내용은 POST로 input1을 받아서 이미 만들어둔 함수인 faq_answer에 넣고, 그 출력값을 response에 다시 넣어서 돌려주는 내용 같습니다.

@csrf_exempt
def chat_service(request):
    if request.method == 'POST':
        input1 = request.POST['input1']
        response = faq_answer(input1)

        try:
            output = dict()
            output['response'] = response
            return HttpResponse(json.dumps(output), status=200)
        except:
            output = dict()
            output['response'] = '비슷한 질문에 대한 답변이 없습니다'
            return HttpResponse(json.dumps(output), status=200)
    else:
        return render(request, 'addresses/chat_test.html')

그런데요, try - except 구문에서 이해가 잘 안 됩니다. try의 첫 번째 줄인 output = dict()는 왜 둘 다 있는지 모르겠습니다. 이 부분에서 오류가 나면 except로 가는 건가요?

아니면 try 마지막 줄에서 return HttpResponse(json.dumps(output), status=200) 부분에서 오류가 나면 except로 가는 건가요? 그런데 만약 이 부분이 오류라면 왜 except에도 동일하게 있는 건지 궁금합니다.

try except 예문을 보면 간단하게 쓰여 있는데 막상 실제로 챗봇에 쓰이는 try except 부분을 보니 응용이 안 됩니다. ㅠㅠ

작년 말 ~ 올 초에 점프 투 파이썬 웹 버전 책을 잘 봤었는데요, 이젠 장고도 만들어주시다니 그저 감사할 따름입니다.

감사합니다.

kungmo 541

M 2020년 7월 13일 9:14 오전

목록으로
1개의 답변이 있습니다. 1 / 1 Page

안녕하세요.

output=dict() 문장에서는 오류가 발생할게 없네요.

try 문장안에서 오류가 발생한다면 아마도 다음 부분일 것입니다.

return HttpResponse(json.dumps(output), status=200)

output을 json으로 만드는 과정중에 output이 json으로 변환할 수 없는 값이 들어 있을 경우 오류가 발생할 수 있을 것 같습니다.

except 부분에서는 output 값이 하드코딩되어 있어서 오류날 게 없네요.

박응용

2020년 7월 13일 9:34 오전

우와. 답변을 이렇게나 빠르게 해주시다니! 감사합니다^^ 그렇다면 try-except 구문은 try 안에 있는 명령어 중 하나라도 문제가 있으면 except로 넘어가는 것이고 return HttpResponse(json.dumps(output), status=200) 에서 오류가 생기더라도 이 명령어를 오류가 난 채로 return 하기는 한다는 내용인 건가요? - kungmo님, M 2020년 7월 13일 1:26 오후 추천 , 대댓글
@kungmo님 그 부분에서 오류가 생기면 except: 이하 구문을 타게 됩니다. - 박응용님, 2020년 7월 13일 2:42 오후 추천 , 대댓글
+1 @박응용님 답변 주셔서 감사합니다. 그렇다면 try 안에 있는 것 중 아무 거나 오류가 하나라도 나면 except로 가는 거군요. 덕분에 try - except가 조금씩 보이기 시작합니다. 감사합니다. - kungmo님, 2020년 7월 18일 9:04 오후 추천 , 대댓글
@kungmo님 네 except 뒤에 특정 오류를 지정하지 않으면 try 문내에서 오류 발생시 except 로 빠지게 됩니다. - 박응용님, 2020년 7월 18일 10:52 오후 추천 , 대댓글
@박응용님 답변 정말정말 감사합니다!! - kungmo님, 2020년 7월 19일 7:30 오후 추천 , 대댓글