👩🏻💻 4주차 우수 혼공족 선정!!! 감사합니당 🌟🌟
그리구,, 환절기라 그런가 아프신 분들이 좀 많나보다.
혼공 학습단 친구덜아,,! 다덜 아프지마,,,😭
06-1. 구문 오류와 예외
▷ 핵심 키워드 - 구문 오류 / 예외(런타임 에러) / 기본 예외 처리 / try except 구문
✍🏻 지금까지의 책 예제에서 발생하는 오류들을 '예외'라고 불렀다
✏️오류의 종류
- 프로그램 실행 전에 발생하는 오류 -> 구문 오류
- 프로그램 실행 중에 발생하는 오류 -> 예외 / 런타임 오류
👻구문 오류
-괄호의 개수, 들여쓰기 문제 등으로 프로그램이 실행되기도 전에 발생하는 오류
print("# 예외를 강제로 발생시켜 보자)
# 닫는 따옴표로 문자열을 닫지 않아서 오류 발생
👉🏻SyntaxError: 구문에 문제가 있어 프로그램이 실행조차 되지 않는 오류
👻예외
-실행 중에 발생하는 오류
#프로그램 시작
print("# 프로그램이 시작되었습니다")
#예외 발생 코드
list_a[1]
👆🏻코드 실행하면 프로그램은 실행되지만, list_a[1]을 읽을 때 NameError가 발생함
👉🏻list_a = [1, 2, 3, 4, 5]를 넣어 수정하면 정상적으로 실행된다 / list_a를 정의해야 했기 때문
✏️기본 예외 처리
-예외 처리: 예외를 해결하는 모든 것 / 다음 두 가지로 나뉨
- 조건문을 사용하는 방법
- try 구문을 사용하는 방법
👻예외 상황 확인하기
-예외가 발생할 수 있는 코드
number_input_a = int(intput("정수 입력>")
print("원의 반지름:", number_input_a)
print("원의 둘레:", 2 * 3.14 * number_input_a)
print("원의 넓이:", 3.14 * number_input_a * number_input_a)
👉🏻여기서 정수가 아닌 "7센티미터"라는 문자열을 입력하게 되면 예외가 발생하게 된다
👻조건문으로 예외 처리하기
-'정수를 입력하지 않았을 때'를 조건으로 구분해서 해당 상황일 때 다른 처리를 하도록 설정하기
📋isdigit() 함수 - 숫자로만 구성된 글자인지 확인 / int() 함수를 이용해 숫자로 변환할 수 없는 문자열을 변환하면서 발생하는 예외를 피할 수 있다
🖐🏻직접 해보는 손코딩🖐🏻
-결과
정수 입력 |
문자열 입력 |
✏️try except 구문
-예외가 발생할 상황을 예측하고 모두 조건문으로 처리하는 것은 매우 힘든 일이다. 따라서 요즘 프로그래밍 언어는 예외를 처리할 수 있는 구문을 제공한다. 바로 try except 구문.
try:
예외가 발생할 가능성이 있는 코드
except:
예외가 발생했을 때 실행할 코드
🖐🏻직접 해보는 손코딩🖐🏻
-결과
👻try except 구문과 pass 키워드 조합하기
try:
예외가 발생할 가능성이 있는 코드
except:
pass
🖐🏻직접 해보는 코딩🖐🏻
-결과
👉🏻숫자로 변환할 수 없는 문자열이라면 float(item)를 실행할 때 예외 발생 / 이를 이용해서 try except 구문으로 감싸고 예외가 발생하지 않는 경우에만 list_number.append(item)가 실행되도록 만드는 코드
✏️try except else 구문
try:
예외가 발생할 가능성이 있는 코드
except:
예외가 발생했을 때 실행할 코드
else:
예외가 발생하지 않았을 때 실행할 코드
🖐🏻직접 해보는 손코딩🖐🏻
-결과
정수 입력 |
문자열 입력 |
✏️finally 구문
-예외가 발생하든 발생하지 않든 무조건 실행할 때 사용하는 코드
try:
예외가 발생할 가능성이 있는 코드
except:
예외가 발생했을 때 실행할 코드
else:
예외가 발생하지 않았을 때 실행할 코드
finally:
무조건 실행할 코드
🖐🏻직접 해보는 손코딩🖐🏻
-결과
정수 입력 |
문자열 입력 |
👉🏻두 가지 모두 "일단 프로그램이 어떻게든 끝났습니다."라는 fanally 구문이 실행된다.
👻try, except, finally 구문의 조합
-예외 처리 구문의 규칙
- try 구문은 단독으로 사용할 수 없으며, 반드시 except 구문 또는 finally 구문과 함께 사용해야 한다
- else 구문은 반드시 except 구문 뒤에 사용해야 한다
-조합
- try + except
- try + except + else
- try + except + finally
- try + except + else + finally
- try + finally
- 이 외의 조합은 실행할 때 오류가 발생함
👻finally에 대한 오해
🖐🏻직접 해보는 손코딩1🖐🏻
-파일이 제대로 닫혔는지 확인해보기
-결과
📋프로그램이 항상 켜져있는 프로그램(데몬 또는 서비스)이라면 문제가 생긴다.
🖐🏻직접 해보는 손코딩2🖐🏻
-파일 중간에 예외 발생시키기
-결과
👉🏻이걸 finally 구문을 사용해 파일을 닫게 해야 한다.
🖐🏻직접 해보는 손코딩3🖐🏻
-finally 구문 사용해 파일 닫기
-결과
🖐🏻직접 해보는 손코딩4🖐🏻
-그냥 try except 구문 끝난 후에 파일 닫아보기
-결과
👆🏻그냥 구문 모두 끝난 후에 파일을 닫아도 된다.
👉🏻파일 처리를 할 때 finally를 무조건 사용하는 것이 아니라 finally 키워드를 사용하면 코드가 깔끔해질 것 같다고 생각되는 경우에 사용하는 것
👻try 구문 내부에서 return 키워드를 사용하는 경우 (finally 깔끔)
-finally 구문은 반복문 또는 함수 내부에 있을 때 위력을 발휘한다.
🖐🏻직접 해보는 손코딩1🖐🏻
-결과
.👉🏻try 구문 중간에서 탈출해도 finally 구문은 무조건 실행된다.
🖐🏻직접 해보는 손코딩2🖐🏻
-결과
(결과가 맞는지는 모르겠지만 현재 낡고 지쳤으므로 이것으로 기록)
👻반복문과 함께 사용하는 경우(finally 깔끔22)
-반복문에서 break로 빠져나갈 때
🖐🏻직접 해보는 손코딩🖐🏻
-결과
👉🏻break 키워드로 try 구문 전체를 빠져나가도 finally 구문이 실행되는 것을 볼 수 있다
6-1 chapter 마무리
🔎핵심 포인트
-구문 오류는 프로그램의 문법적인 오류로 프로그램이 실행조차 되지 않게 만드는 오류
-예외(런타임 에러)는 프로그램 실행 중에 발생하는 에러
-기본 예외 처리는 조건문 등을 사용해 예외를 처리하는 기본적인 방법
-try except 구문은 예외 처리에 특화된 구문
06-2. 예외 고급
▷ 핵심 키워드 - 예외 객체 / raise 구문 / 깃허브
✍🏻 예외 객체 - 프로그래밍 언어는 예외가 발생하면 예외와 관련된 정보가 생긴다. 그리고 이러한 예외 정보는 예외 개게에 저장된다.
-예외 객체의 형태
try:
예외가 발생할 가능성이 있는 구문
except 예외의 종류 as 예외 객체를 활용할 변수 이름:
예외가 발생했을 때 실행할 구문
✏️예외 객체
-Exception: '모든 예외의 어머니'
🖐🏻직접 해보는 손코딩🖐🏻
-결과
👉🏻예외 강제 발생시킴!
✏️예외 구분하기
-예외 객체를 사용하면 except 구문을 if 조건문처럼 사용해서 예외를 구분할 수 있다.
👻여러 가지 예외가 발생할 수 있는 상황
🖐🏻직접 해보는 손코딩🖐🏻
-여러 가지 예외가 발생할 수 있는 코드
-결과
첫 번째) 정상적으로 정수를 입력한 경우에는 어떠한 예외도 발생하지 않음
두 번째) 정수로 변환될 수 없는 값을 입력한 경우에는 ValueError가 발생함
세 번째) 정수를 입력하지만, 리스트의 길이를 넘는 인덱스를 입력한 경우에는 IndexError가 발생함
👻예외 구분하기
-파이썬은 except 구문 뒤에 예외의 종류를 입력해서 예외를 구분 할 수 있다.
try:
예외가 발생할 가능성이 있는 구문
except 예외의 종류A:
예외A가 발생했을 때 실행할 구문
except 예외의 종류B:
예외B가 발생했을 때 실행할 구문
except 예외의 종류C:
예외C가 발생했을 때 실행할 구문
🖐🏻직접 해보는 손코딩🖐🏻
-결과
정수가 아닌 값을 입력 |
리스트의 인덱스를 넘는 숫자를 입력 |
👻예외 구분 구문과 예외 객체
-as 키워드: 예외를 구분할 때 각각의 except 구문 뒤에 예외 객체를 붙여 활용할 수 있다.
🖐🏻직접 해보는 손코딩🖐🏻
-결과
✏️모든 예외 잡기
-except 구문으로 예외를 구분하면 if, elif, else 조건문처럼 차례대로 오류를 검출하면서 확인한다.
🖐🏻직접 해보는 손코딩🖐🏻
-예외 처리를 했지만 예외를 못 잡는 경우
-결과
🖐🏻직접 해보는 손코딩🖐🏻
-결과
📋큰 규모의 프로그램을 개발할 때는 '예외 처리로 떡칠을 한다'라고 표현할 정도로 예외 처리를 많이 사용한다. 최대한 잡을 수 있는 것들을 예측해 보고 잡을 수 있도록 노력하는 것이 개발자의 자세!
✏️raise 구문
-프로그램이 강제 종료되는 것을 막기 위해 예외는 꼭 처리해야 한다.
-아직 구현되지 않은 부분에서 강제로 예외 발생시키기
# 입력을 받습니다
number = input("정수 입력>")
number = int(number)
#조건문 사용
if number > 0:
# 양수일 때: 아직 미구현 상태입니다
raise NotImplementedError
else:
# 음수일 때: 아직 미구현 상태입니다
raise NotImplementError
👉🏻이 때 사용한 raise 키워드가 예외를 발생시키는 기능을 한다.
raise 예외 객체
🌟깃허브
-대부분의 파이썬 프레임워크와 라이브러리들은 깃허브(GitHub)라는 사이트에 코드가 공개되어 있다.
(어케... 쓰는거지?)
6-2 마무리
🔎핵심 포인트
-예외 객체는 예외와 관련된 정보를 담고 있는 객체
-raise 구문은 예외를 강제로 발생시킬 때 사용하는 구문
-깃허브는 많은 사람이 함께 개발하는 소셜 코딩 사이트
07-1. 표준 모듈
▷ 핵심 키워드 - 표준 모듈 / import 구문 / from 구문 / as 키워드
✍🏻모듈: 여러 변수와 함수를 가지고 있는 집합체로, 크게 표준 모듈과 외부 모듈로 나뉜다.
표준 모듈: 파이썬에 기본적으로 내장되어 있는 모듈 | 외부 모듈: 다른 사람들이 만들어서 공개한 모듈 |
-모듈을 가져올 때는 👇🏻다음과 같은 구문을 사용한다
import 모듈 이름
✏️모듈 사용의 기본: math 모듈
-math 모듈은 수학과 관련된 기능을 가지고 있다.
👻모듈 문서
-math 모듈의 함수
변수 또는 함수 | 설명 |
sin(x) | 사인값을 구합니다 |
cos(x) | 코사인값을 구합니다 |
tan(x) | 탄젠트값을 구합니다 |
log(x[, base]) | 로그값을 구합니다 |
ceil(x) | 올림합니다 |
floor(x) | 내림합니다 |
👻from 구문
-앞에 무언가를 계속 입력하는 것이 귀찮다고 느껴질 경우에는 from 구문을 사용한다
from 모듈 이름 import 가져오고 싶은 변수 또는 함수
👻as 구문
-모듈의 이름이 너무 길어서 짧게 줄여 사용하고 싶은 경우에는 as 구문을 사용한다
import 모듈 as 사용하고 싶은 식별자
✏️random 모듈
-random 모듈은 랜덤한 값을 생성할 때 사용하는 모듈
import random
👉🏻random 모듈을 임포트한 뒤, random을 입력하고 뒤에 마침표를 찍으면 자동 완성 기능으로 random 모듈이 가지고 있는 기능들을 확인할 수 있다
🖐🏻직접 해보는 손코딩🖐🏻
-결과
✏️sys 모듈
-sys 모듈: 시스템과 관련된 정보를 가지고 있는 모듈
🖐🏻직접 해보는 손코딩🖐🏻
(명령 프롬포트 창에서 [py module_sys.py 10 20 30]을 입력해서 실행해보기. 경로가 일치해야 해서 Desktop에서 실행했다)
-결과
👉🏻sys.argv라고 되어 있는 부분이 명령 매개변수 -> 프로그램을 실행할 때 추가로 입력하는 값들을 의미한다
👉🏻코드를 실행하면 sys.argv에 ['module_sys.py', '10', '20', '30']이라는 리스트가 들어오게 된다. 이 외의 값들은 윈도우의 버전, 파이썬의 저작권 등을 확인하는 단순한 것들
✏️os 모듈
-os 모듈: 운영체제와 관련된 기능을 가진 모듈 / 새로운 폴더를 만들거나 폴더 내부의 파일 목록을 보는 일 모두 os 모듈을 활용해서 처리한다.
🖐🏻직접 해보는 손코딩🖐🏻
-결과
📋remove() 함수와 unlink() 함수는 같은 함수이다. 아무거나 사용해도 상관 없다.
✏️datetime 모듈
-datetime 모듈: date(날짜), time(시간)과 관련된 모듈
🖐🏻직접 해보는 손코딩1🖐🏻
-결과
👉🏻strftime() 함수를 사용하면 시간을 형식에 맞게 출력할 수 있지만, 한국어 등의 문자를 매개변수에 넣을 수 없다. 이를 보완하고자 output_b와 output_c 같은 형식을 사용한다.
📋문자열, 리스트 등 앞에 *을 붙이면 요소 하나하나가 매개변수로 지정된다
🖐🏻직접 해보는 손코딩2🖐🏻
-결과
👉🏻timedelta() 함수를 사용하면 특정한 시간의 이전 또는 이후를 구할 수 있다
👉🏻1년 후를 구할 때는 replace() 함수를 사용한다
✏️time 모듈
-time 모듈: 시간과 관련된 기능을 다룰 때 사용함 / 특정 시간 동안 코드 진행을 정지할 때 많이 사용한다
-time 모듈 임포트 방법
import time
-time.sleep() 함수: 특정 시간 동안 코드 진행을 정지할 때 사용하는 함수 / 매개변수에는 정지하고 싶은 시간을 초 단위로 입력한다
🖐🏻직접 해보는 손코딩🖐🏻
-결과
✏️urllib 모듈
-urllib 모듈: URL을 다루는 라이브러리 / 인터넷 주소를 활용할 때 사용하는 라이브러리
🖐🏻직접 해보는 손코딩🖐🏻
-결과
📋앞에 'b'라는 글자가 있는데 이는 바이너리 데이터(binary data)를 의미한다.
7-1 마무리
🔎핵심 포인트
-표준 모듈은 파이썬이 기본적으로 제공하는 모듈
-import 구문은 모듈을 읽어 들일 때 사용하는 구문
-모듈을 읽어들일 때 from 구문을 사용하면 모듈에서 가져오려는 변수나 함수 앞에 모듈 이름을 붙이지 않아도 된다
-as 키워드는 모듈을 읽어 들이고 별칭을 붙일 때 사용하는 구문
기본미션
Q) 구문 오류와 예외의 차이
A) 구문 오류는 프로그램 실행 전에 나는 오류로, try except 구문으로 처리할 수 없다.
반면에 예외는 프로그램 실행 중에 나는 오류로, try except 구문으로 처리할 수 있다.
선택미션
Q) 구문 오류가 예상되면 '구문 오류'에, 예외 발생이 예상되면 '예외'에 체크 표시를 한 후, 예상되는 에러명도 쓰시오.
output = 10 + "개" #1
int("안녕하세요") #2
cursor.close) #3
[1, 2, 3, 4, 5][10] #4
A)
#1. 예외 / TypeError
#2. 예외 / ValueError
#3. 구문 오류 / SyntaxError
#4. 예외 / IndexError
+) 와 5주차 진짜 장난아니닼ㅋㅋㅋㅋㅋ 진짜 몇 시간동안 머리 싸매면서 이해하기 위해 고민하고 또 고민했다...
그래도 어찌저찌 끝까지 공부완료했다! 뿌듯뿌듯 ✨✨
다음 주가 마지막 주인데, 끝까지 잘 마무리하고 싶다. 마지막까지 화이팅~!!!! ✊🏻✊🏻
'코딩 공부 > 파이썬 (혼공단 11기)' 카테고리의 다른 글
혼공단 11기 활동 회고록🚩 (0) | 2024.02.16 |
---|---|
[혼공파] 6주차_07-2 ~ 08 (0) | 2024.02.07 |
[혼공파] 4주차_05 (0) | 2024.01.24 |
[혼공파] 3주차_04 (0) | 2024.01.21 |
[혼공파] 2주차_02-3 ~ 03 (0) | 2024.01.12 |