Python

있어보이는 Python: try/except, enumerate

qlsenddl 2020. 11. 9. 20:19
728x90

1. try / except

 보통 python에서 code 실행 시 error가 발생하는 경우, error 메시지를 띄우며 code 실행이 중지된다. 이런 error를 없애기 위해 아예 error가 발생하지 않도록 code를 짜는 것도 중요하지만, error가 발생했을 때 그 때에 맞게 error를 수정할 수 있도록 해주는 것이 try / except 함수라고 할 수 있다.

 기본 문법은 다음과 같다.

try: 

<기본 code>

except:

<error가 발생 시 처리할 code>


 우선 try에 있는 <기본 code>부분을 실행한다. 그러다가 기본 code를 실행 시 error가 발생하는 경우 error가 발생한 부분의 실행을 중단하고 except에 있는 <error가 발생 시 처리할 code>를 실행한다. 이를 통해 error가 발생하지 않는다면 code 중단없이 code를 실행할 수 있다. 물론 except에 있는 code를 실행 시 오류가 난다면 그에 대한 error 메시지가 출력되며 code 실행이 중단된다.

ex1>

a = [3, 2, 1, 0]

b = []

c = 10

for i in a:

    b.append(c/i)

print(b)

>> ZeroDivisionError: division by zero

-> for문을 돌 때, 0으로 나누는 경우가 생겨 error가 발생하며 코드 중단


ex2>

a = [3, 2, 1, 0]

b = []

c = 10

for i in a:

    try:

        b.append(c/i)

    except:

        b.append(c)

print(b)

>> [3.3333333333333335, 5.0, 10.0, 10]

-> 0으로 나누는 경우가 생기면 except에 있는 코드가 돌며 code 중단없이 실행 가능


2. enumerate

 enumerate는 sequence가 있는 자료형(list, tuple, string 등)에 대해서 그 index 값도 같이 내보내는 역할을 한다. 보통 sequence가 있는 자료형은 for문에서 다음과 같은 문법으로 적용될 수 있다.

 즉, sequence가 있는 자료형을 직접 for문에 넣는 경우, for문을 통해 그 element들이 하나씩 나오게 된다. 하지만 enumerate를 쓰면 element 뿐만 아니라 그 element의 index 값이 같이 나오게 된다. 때문에 sequence가 있는 자료형의 index 값도 필요한 경우 enumerate를 사용한다.

ex1>

a = [3, 2, 1]

for idx, element in enumerate(a):

    print(idx, element)

>> 0 3

     1 2
     2 1


ex2>

a = [(1, 'a'), (2, 'b'), (3, 'c')]

for idx, (element1, element2) in enumerate(a):

    print(idx, element1, element2)

>> 0 1 a

     1 2 b
     2 3 c


ex3>

student_number = ['student1', 'student2', 'student3', 'student4']

grade = ['A', 'B', 'F', 'C']

for idx, student in enumerate(student_number):

    print(student, ':', grade[idx])

>> student1 : A

     student2 : B
     student3 : F
     student4 : C

-> index 정보를 사용하는 예시


728x90