사용자가 직접 에러를 발생시키는 기능 raise exception
사용자가 직접 에러를 발생시키는 기능 raise exception
rsp라는 변수를 def 정의를 해주고 mine과 yours를 받습니다.
allowed = ['가위', '바위', '보'] 라고 정해준것은 가위, 바위, 보 이 값으로만 된것을 받는다 라는 뜻이고
if 만약에 mine 이 not in allowed: allowed와 맞지 않는다면
raise valueError 에러를 발생시킵니다.
if 만약에 yours 가 not in allowed: allowed와 맞지 않는다면
raise valueError 에러를 발생시킵니다.
if 만약에 yours
9라인에서 에러가 발생합니다.
에러가 발생하는 9라인 부분에
아래와 같은 블럭으로 만들어서 에러가 발생시 출력하도록 하는 내용을 입력합니다.
이와같이 사용자가 직접 에러내용을 입력하여 출력이 가능합니다.
--------------------------------------------------------------------
학교에 1반부터 2반까지 있다고 생각해 보겠습니다.
1반에는 학생들의 키에 값을 가지고 있는데요.
2반에도 학생들의 키를 갖고 있는데요.(딕셔너리 dict)
Q. 학생들중 190이상이 넘는 학생이 있을경우에 그반이름을 출력하고 즉시 종료하려면 어떻게 해야할까요?
반을 한번 순회해야겠죠. for문으로 class_number, students in school.items():
1반 = class_number가 되겠구요. 172 ~ 199은 students가 들어가겠죠.
여기에서 items는 딕셔너리 dict에서 key값과 value 값 둘다 받을 수 있습니다.
그안에서 각 학생들을 검사해봐야겠는데요.
for student in students:
if student>190:
print(class_number, '190을 넘는 학생이 있습니다')
students(value값)을 for문을 이용하여 하나씩 반복하여 확인을 해봐야겠죠.
그리고 students라는 value값(dict에서는 뒤에있는값이 value값)이 190보다 크면
print('class_number, '반에 190을 넘는 학생이 있습니다') 라고 출력 해야겠죠.
그리고나서 바로 종료하고 싶다면?
for student in students:
if student>190:
print(class_number, '190을 넘는 학생이 있습니다')
break
이렇게 break을 추가적으로 넣어주면 위의
for student in students ~ break 까지는 종료가 되지만
그 상위 for문은 종료가 되지 않기 때문에 2반으로 넘어가서 한번더 실행이 될것입니다.
딕셔너리는 순서를 정해주지 않기 때문에, 2반이 먼저나올수도, 1반이 먼저나올수도 있습니다.
그렇다면 이렇게 중첩된 for문에서 바로 종료를 하고 싶을땐 어떻게 할까요?
바로종료를 하고자 하는곳 바로 밑에 raise StopIteration을 입력해준 뒤
try 와 except로 감싸줘야 합니다.
그리고 except 옆에 StopIteration:을 입력해주고
print('정상종료')를 해주면 됩니다.
위에 처럼 하게 될경우에, 첫번째 반에서 190이넘는 학생을 찾게될경우 즉시 종료하고 2반으로 넘어가지 않습니다.