Python

python 모듈 / 오류처리 / 오류회피

Dokker 2023. 5. 31. 13:05

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()