구문 오류와 예외의 차이 설명하기(p.379 1번)

p.381 3번 문제, 인증샷

 

❤ 06-1 구문 오류와 예외

* 구문 오류 - 프로그램 실행 전에 발생하는 오류

구문 오류는 괄호의 개수, 들여쓰기 문제 등으로 프로그램이 실행되기도 전에 발생하는 오류이다.

ⓐ SyntaxError : 구문에 문제가 있어 프로그램이 실행조차 되지 않는 오류

 

* 예외(런타인 오류) - 프로그램 실행 중에 발생하는 오류

 

* 기본 예외 처리 - 예외를 해결하는 모든 것

ⓐ 조건문을 사용하는 방법

문자열의 isdigit() 함수를 사용해서 숫자로만 구성된 글자인지 확인하면 int() 함수를 이용해 숫자로 변환할 수 없는 문자열을 변환하면서 발생하는 예외를 피할 수 있다.

 

ⓑ try 구문을 사용하는 방법

try:
     예외가 발생할 가능성이 있는 코드
except:
     예외가 발생했을 때 실행할 코드

이를 사용하면 어떤 상황에 예외가 발생하는지 완벽하게 이해하고 있지 않아도 프로그램이 강제로 죽어 버리는 상황을 막을 수 있다.

try, except 사용한 코드

 

 

try:
     예외가 발생할 가능성이 있는 코드
except:
     pass

숫자로 변환되는 것들만 리스트에 넣기 코드

> 숫자로 변환할 수 없는 문자열이라면 float(item)를 실행할 때 예외가 발생한다. 이를 이용해서 try except 구문으로 감싸고 예외가 발생하지 않는 경우에만 list_number.append(item)가 실행되도록 만드는 코드이다.

try except 구문은 if 구문을 활용한 코드에 비해 아주 약간 느리다.

 

ⓒ try except else 구문

try:
     예외가 발생할 가능성이 있는 코드
except:
     예외가 발생했을 때 실행할 코드
else:
     예외가 발생하지 않았을 때 실행할 코드

try excpet else 구문

ⓓ finally 구문

예외가 발생하든 발생하지 않든 무조건 실행할 때 사용하는 코드이다.

try:
     예외가 발생할 가능성이 있는 코드
except:
     예외가 발생했을 때 실행할 코드
else:
     예외가 발생하지 않았을 때 실행할 코드
finally:
     무조건 실행할 코드

두 가지 경우 모두 finally 구문이 실행되는 것을 확인할 수 있다.

✔ try 구문은 단독으로 사용할 수 없으며, 반드시 excpet 구문 또는 finally 구문과 함께 사용해야 한다.

✔ else 구문은 반드시 except 구문 뒤에 사용해야 한다.

따라서 정리하면 try 구문은 다음 조합들을 사용할 수 있다.

⊙ try + except 구문 조합
⊙ try + except + else 구문 조합
⊙ try + except + finally 구문 조합
⊙ try + except + else + finally 구문 조합
⊙ try + finally 구문 조합

 

* 파일이 제대로 닫혔는지 확인하기

close() 함수 사용해서 파일 닫기, 하지만 중간 과정에서 예외가 발생하여 try 구문 중간에 튕기면 파일이 제대로 닫히지 않을 수 있음.
예외가 발생했지만 finally 구문을 사용하여 파일 닫게 하기, BUT try except 구문이 모두 끝난 후에 파일 닫으면 되기 때문에 무조건 finally 키워드를 사용해야 하는 것은 아님.

 

<기본 미션>

구문 오류와 예외의 차이

 

<추가 미션>

 

 

❤ 06-2 예외 고급

* 예외 객체

프로그래밍 언어는 예외가 발생하면 예외와 관련된 정보가 생긴다.

try:
     예외가 발생할 가능성이 있는 구문
except 예외의 종류 as 예외 객체를 활용할 변수 이름:
     예외가 발생했을 때 실행할 구문

* 예외 구분하기

예외 객체를 사용하면 except 구문을 if 조건문처럼 사용해서 예외를 구분할 수 있다.

try:
     예외가 발생할 가능성이 있는 구문
excpet 예외의 종류A:
      예외A가 발생했을 때 실행할 구문
excpet 예외의 종류B:
      예외B가 발생했을 때 실행할 구문

ValueError인지 IndexError인지 예외 구분하기

* 예외 구분 구문과 예외 객체

예외를 구분할 때 각각의 except 구문 뒤에 예외 객체를 붙여 활용할 수도 있다. as 키워드를 사용하면 된다.

예외 구분 구문과 예외 객체

* raise 구문

아직 구현되지 않은 부분에 일부러 예외를 발생시켜 프로그램을 죽게 만들어 잊어버리지 않도록 raise 키워드를 이용해 예외를 강제로 발생시킨다.

raise 예외 객체

총정리~!

 

 

 

❤ 07-1 표준 모듈

* 모듈 사용의 기본: math 모듈

import math

'impot math'를 입력하면 해당 문장 이후에 'math'라는 모듈을 사용할 수 있다.

math 모듈

* from 구문

from 모듈 이름 import 가져오고 싶은 변수 또는 함수

from 구문을 사용하여 math를 앞에 붙이지 않고도 사용하기

from math import *

를 사용하면 모든 기능을 가져올 수 있다. 하지만 모든 것을 가져오면 식별자 이름에서 충돌이 발생할 수 있으므로, from 구문을 사용할 때에는 최대한 필요한 것만 가져와서 사용하는 것이 좋다.

 

* as 구문

import 모듈 as 사용하고 싶은 식별자

이를 활용하여 impot math as m 이런 식으로 코드를 사용하면 math 모듈을 m이라는 이름 등으로 사용할 수 있다.

m.sin(1) 이런 식으로 !

 

* random 모듈

import random

random 모듈은 랜덤한 값을 생성할 때 사용하는 모듈이다.

random 모듈 사용 코드

* sys 모듈

sys 모듈은 시스템과 관련된 정보를 가지고 있는 모듈이다. 명령 매개변수를 받을 때 많이 사용한다.

* os 모듈

os 모듈은 운영체제와 관련된 기능을 가진 모듈이다. 새로운 폴더를 만들거나 폴더 내부의 파일 목록을 보는 일도 모두 os 모듈을 활용해서 처리한다.

os 모듈

* datetime 모듈

datetime 모듈은 date, time과 관련된 모듈로, 날짜 형식을 만들 때 자주 사용되는 코드들로 구성되어 있다.

현재 시각 출력하는 코드

output_a처럼 strftime() 함수를 사용하면 시간을 형식에 맞춰 출력할 수 있다. 그러나 한국어 등의 문자는 매개변수에 넣을 수 없다. 그래서 이를 보완하고자 output_b와 output_c와 같은 형식을 사용한다.

이 외에도 다른 시간 처리 기능을 활용할 수 있다. timedelat() 함수를 사용하면 특정한 시간의 이전 또는 이후를 구할 수 있다. 하지만 1년 후와 같이 몇 년 후를 구하는 기능은 없어서 replace() 함수를 사용하여 아예 날짜 값을 교체하는 것이 일반적이다.

 

#특정 시간 요소 교체하기

print("# now.replace()로 1년 더하기")

output = now.replace(year=(now.year+1))

print(output.strftime("%Y{} %m{} %d{} %H{} %M{} %S{}").format(*"년월일시분초"))

 

 

* time 모듈

time 모듈은 시간과 관련된 기능을 다룰 때 사용하는 모듈이다. time 모듈은 유닉스 타임을 구할 때, 특정 시간 동안 코드 진행을 정지할 때 많이 사용한다.

import time

특정 시간 동안 코드 진행 정지하는 time.sleep() 함수를 이용하여 5초 동안 정지하고 종료되는 프로그램 짜기

* urllib 모듈

urllib 모듈은 URL을 다루는 라이브러리이다. URL은 'Uniform Resource Locator'라는 뜻으로, 인터넷 주소를 활용할 때 사용한다.

urlopen() 함수는 URL 주소의 페이지를 열어주는 함수이다.

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ정리ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ