python 모듈 / 오류처리 / 오류회피
P.210 ----> if __name__ == "__" :
__name__ : 언더바로 시작하는 변수명 / 함수명 --> 내부 변수/ 함수
내부 : 사용자의 필요가 아닌 프로그램이 동작하기 위한 값
__name__ ----> 호출되는 대상의 경로값
"__main__" : main 프로그램에서 호출되었음.
if __name__ == "__" : ---> True가 되는 상황
프로그램을 사용자가 직접 실행 시켰을 때
mod1.py --------> python3 mod1.py : 사용자가 직접 실행
--------> import mod1 : main 프로그램이 호출한 mod1
현재 mod1.py 파일내용
def add(a, b):
return a + b
def sub(a, b):
return a - b
print(add(1, 2))
print(sub(3, 1))
main 프로그램에서 import mod1 추가하게 되면 실행코드블럭이 자동으로 실행된다.
print(add(1, 2))
print(sub(3, 1))
이 코드블럭은 자동 실행된다.
>>> import mod1
3
2
>>>
---------> 실행파일 (실행프로그램)
mod1.py 파일을 라이브러리로만 사용하고 싶다.
단독 실행도 가능하나 라이브러리로 사용 될 때(import)에는 코드블럭이 자동 실행되지 않았으면 좋겠다.
2023.06.01 P.212
상수 >> 변하지 않는 수
변수 >> 변하는 수
변수 : 메모지 주소의 값을 기억 : 한 번 기억 되면 주소의 값을 변경하지 않는다 :
파이썬에서는 별도의 상수 지정 방식이 존재하지 않는다.
C / C++ : 선언문 : define
Java : static final
------- : 정적 멤버 변수
------ : 한 번 지정 된 이후 변경할 수 없다.
PI = 4 # 변수명이 모두 대문자로 표현 ---> 상수
PI = 5
print(PI)
------------
>>>5
p.222 예외처리
exception : 예외 ---> 코드에는 이상이 없다.
프로그램이 실행되지 않는다 --->이유? 1. 코드의 작성이 문법에 어긋날 때
2. 정의한 뒤에 호출 ---> 정의되지 않은 것을 호출
---------------------------------------------------------------
개발자의 실수 --> 오류: Error
개발자가 실수하지 않았고 컴퓨터에 이상이 없다.
특정 상황에 의해 컴퓨터가 어떻게 처리해야 할지모르는 경우
import sys
print("나누기 프로그램입니다.")
a = int(input("정수입력:"))
if a == 0:
print("잘못된입력")
sys.exit()
b = int(input("정수입력:"))
if b ==0:
print("잘못된입력")
sys.exit()
print(a/b)
에러
1. 개발자
2. 시스템
3. 논리적 / 상황에 따른 ---> 예외
예외 예시
list1 = [1,2,3,4]
a = int(input("몇번째의 데이터를 요청하시겠습니까?"))
if a <= len(list1): # 예외처리
print(list1[a-1])
>>>5번째 데이터를 요청한다면??? 예외처리함.
예외처리
trt:
코드블럭
#예외처리
try:
print("나누기 프로그램입니다.")
a = int(input("정수입력:"))
b = int(input("정수입력:"))
print(a/b)
except []:
#분기하겠다.
print("예외가 발생 했습니다. 현재 이유는 모름")
ZeroDivisionError: division by zero
-------------> e 라고 지칭한다.
#예외처리
try:
list1 = [1,2,3,4]
a = int(input("몇번째의 데이터를 요청하시겠습니까?"))
print(list1[a - 1])
except []:
#분기하겠다.
print("예외가 발생 했습니다. 현재 이유는 모름")
IndexError: list index out of range
기존 예외 처리 코드 + 에러 메시지(e)에 따른 대처를 할 수 있다.
ZeroDivisionError: division by zero
----------------------------- : 발생 오류
------------------------- : 오류 메시지
---------------매개변수 : e
#예외처리
try:
print("나누기 프로그램입니다.")
a = int(input("정수입력:"))
b = int(input("정수입력:"))
print(a/b)
except ZeroDivisionError as e:
#ZeroDivisionError 가 발생되었을 떄 분기하겠다.
#분기하겠다.
print("예외가 발생 했습니다%s"%(e))
----------------------------------------------------------------------------
나누기 프로그램입니다.
정수입력: 4
정수입력: 0
예외가 발생 했습니다division by zero
#예외처리
try:
list1 = [1,2,3,4]
a = int(input("몇번째의 데이터를 요청하시겠습니까?"))
print(list1[a - 1])
except IndexError as e:
#IndexError 발생 시 분기하겠다.
print("예외가 발생 했습니다. %s"%(e))
--------------------------------------------------------------------------------------
몇번째의 데이터를 요청하시겠습니까? 5
예외가 발생 했습니다. list index out of range
improt sys
from mod1 import add
class A:
def a(self):
pass
def b():
pass
-----------------------------------------:선언부
실행부
try:
pass
except:
except:
f = open("/경로/파일명", "r" , encoding="utf-8)
data = f.read()
f.close() #객체를 메모리에서 삭제
try:
f = open("/경로/파일명", "r" , encoding="utf-8)
data = f.read()
finally:
f.close() # 객체를 메모리에서 삭제
<<< 기본 코드 템블릿 >>>
if __name__=="__main__":
try:
#코드블럭
except IndexError as e:
#IndexError 발생 시 분기하겠다.
print("예외가 발생 했습니다%s"%(e))
except ZeroDivisionError as e:
#ZeroDivisionError 가 발생되었을 떄 분기하겠다.
print("예외가 발생 했습니다%s"%(e))
finally:
print("프로그램 종료")
#파일 객체가 존재한다면 반드시여기에서 close()