강의로 돌아가기
MSL

단락평가 순서 질문드립니다.

본 강의 마지막으로 설명한 예시에서 아래와 같이 코드를 보여주셨는데요.

dic = {'key2':'value1'}

if 'key1' in dic and dic['key1']=='value1':
    print('key1도 있고, 그 값은 value1 이다')
else:
    print('아니네')

이때 'key1'in dic 와 dic['key1']=='value1'의 순서를 바꾸면 에러 메세지가 나온다고 말씀해주셨어요.
사실 둘다 참이 아니라는 점은 동일한데
하나는 else문으로 넘어가고, 하나는 에러가 나버리는 이유가 있을까요?

1 개의 답변
Demi

딕셔너리는 누군가가 자신에게 없는 키로 접근하는 경우, 에러를 냅니다.
'key1' in dic and dic['key1']=='value1': 코드는 'key1' in dic를 먼저 계산해 이 조건이 참이면 그 다음에 dic['key1']=='value1':를 실행합니다. 만약 'key1' in dic가 거짓인 경우 뒤의 문장은 실행되지 않습니다.
그러니 'key1' in dic and dic['key1']=='value1': 이 문장은 딕셔너리에 키가 있는지 검사를 한 후, 키가 있으면 딕셔너리에 접근하고 키가 없으면 딕셔너리에 접근하지 않아요. 그럼 에러가 발생하지 않겠지요?

그런데 두 문장의 순서를 바꾸면 존재 하지 않는 키로 딕셔너리에 접근할 수 있기 때문에 에러가 발생할 수 있습니다.


이번 강의를 통해 딕셔너리의 행동(없는 키로 접근시 에러 발생)과, and의 동작 방식(앞선 문구가 참이 아닌 경우 뒷 문구를 실행하지 않음)을 완전히 이해하셨으면 좋겠습니다. :)

  • MSL
    dic['key1']=='value1'은 처음부터 해당 딕셔너리에 key1이라는 키가 이미 존재한다고 깔고 가서 에러가 나는군요.. 친절한 답변 감사드립니다^^~ MSL 2019.04.07 21:15
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.