파이썬 7강 네트워크 통신 프로그램, 파이썬 8강 모듈/예외처리 (교육 74일차)

SW·2023년 3월 12일
0








파일명 : day08.txt

전체 학습 목표 : 
1. 예외처리의 개념을 파악하고 적용할 수 있다.
2. 모듈의 개념을 파악하고 적용할 수 있다.

학습 목표 : 
1. 예외처리의 개념을 파악하고 적용할 수 있다.

#############
## 예외 처리
#############
예외란 프로그램이 정상적으로 실행하다가 어떤 원인에 의해서 오작동이 발생되는 에러를 말한다.
예외처리는 이런 에러들이 발생되서 문제가 발생되는 것을 방지하는 기법이다.

!!! 중요 !!!
파이썬에서 실행중에 에러가 발생되면 실행중인 프로세스는 즉시 종료되므로 
이런 예외들이 발생할 때 에러를 우회하는 예외처리 기법을 이용해서 프로그래밍해야 한다.

형식 :
try :
    실행문1
except :
    실행문2
else:         <-- 생략 가능
    실행문3 
finally:      <-- 생략 가능
    실행문4


형식 :
try :
    실행문1
except 발생된에러 :
    실행문2
except 발생된에러 :
    실행문3
except 발생된에러 :
    실행문4
else:         <-- 생략 가능
    실행문5 
finally:      <-- 생략 가능
    실행문4

형식 :
try :
    실행문1
except 발생된에러 as 에러변수 :
    실행문2
except 발생된에러 as 에러변수 :
    실행문3
except 발생된에러 as 에러변수 :
    실행문4
else:         <-- 생략 가능
    실행문5 
finally:      <-- 생략 가능
    실행문4

-- 예외1.py --
"""
파일명 : 예외1.py
프로그램 설명 : 예외처리
"""

#a = []
a = list()
print(a, type(a))  # [] <class 'list'>

a.append(1)
a.append(2)
# a.append(3)
print(a[0])  # 1
print(a[1])  # 2

try :
    # 자동차 펑크
    print(a[2])  # 3 IndexError: list index out of range
except:
    # 타이어 교체
    print('예외가 발생했습니다.')
else:
    print('예외가 발생되지 않았습니다.')
finally:
    print('이 부분은 finally 부분입니다.')

print('프로그램 종료')
-- 예외1.py --

-- 예외1-1.py --
#!/usr/bin/env python3

import sys

try:
    host = sys.argv[1]
except:
    print(f"usage: {sys.argv[0]} <host>")
    exit(2)

print("프로그램 종료")
-- 예외1-1.py --

# chmod 755 예외1-1.py 
# ./예외1-1.py 
usage: ./exceptTest.py <host>

# ./예외1-1.py 200.200.200.6
프로그램 종료



형식 :
try :
    실행문1
except 발생된에러 :
    실행문2
else:
    실행문3 
finally: 
    실행문4
-- 예외2.py --
"""
파일명 : 예외2.py
프로그램 설명 : 예외처리
"""

filename = "예외2.txt"
try:
    f = open(filename, 'r', encoding='utf8')  # FileNotFoundError: 
except FileNotFoundError:
    print('FileNotFoundError!')
except PermissionError:   
    print('PermissionError!') 
else:
    print(f.read())
    f.close()
print('프로그램 종료')
-- 예외2.py --


형식 :
try :
    실행문1
except 발생된에러 as 에러변수 :
    실행문2
except 발생된에러 as 에러변수 :
    실행문3
except 발생된에러 as 에러변수 :
    실행문4
else:
    실행문5 
finally: 
    실행문4

-- 예외3.py --
"""
파일명 : 예외3.py
프로그램 설명 : 예외처리
"""

filename = "예외2.txt"
try:
    f = open(filename, 'r', encoding='utf8')  # FileNotFoundError: 

# e 변수에 에러에 관련된 값이 저장되어 있고 그 값을 출력하는 것이다.
except FileNotFoundError as e:
    print(e)
except PermissionError as e:   
    print(e) 
else:
    print(f.read())
    f.close()
print('프로그램 종료')
-- 예외3.py --

프로그램에서 프로그래머가 직접 예외를 발생시키는 경우에는 raise 를 사용한다.
형식 : 

def 함수명():
    raise 예외값

try :
    함수명()
except 예외값:
    실행문

-- 예외4.py --
"""
파일명 : 예외4.py
프로그램 설명 : 예외처리
"""

def myfunction():
    print("myfunction() 실행!")
    raise ValueError

try:
    myfunction()
except ValueError:
    print('ValueError 가 발생!')

print('프로그램 종료')       

-- 예외4.py --


예외처리가 된 addressbook.py 전체 소스 코드
-- addressbook.py --
"""
파일명 : addressbook.py
프로그램 설명 : 주소록 관리 프로그램
"""

import os 
import getpass
import time

filename1 = "addressbook.txt"      # 주소록 원본 파일
filename2 = "addressbook.txt.tmp"  # 주소록 임시 파일
userid1 = "python"                 # 로그인 아이디
userpw1 = "111111"                 # 로그인 비밀번호
sec = 2                            # 로그인 성공 시 기다리는 시간
loginCount = 3                     # 로그인 횟수

# 1. 주소록 로그인
def loginAddr():
    """주소록 로그인"""
    print('>>> 주소록 로그인 <<<')
    # 하드코딩된 사용자 : userid1
    # 하드코딩된 비밀번호 : userpw1
    # 입력받는 사용자 : userid2
    # 입력받는 비밀번호 : userpw2
    # 사용자 & 비밀번호를 입력받는다.
    userid2 = input('사용자 : ')
    userpw2 = getpass.getpass('비밀번호 : ')

    # 입력한 사용자&비번과 하드코딩으로 세팅된 사용자&비번와 비교한다.
    if userid1 == userid2 and userpw1 == userpw2 :
        # 맞으면 
        print('로그인 성공!')
        print(f'{userid2}님 환영합니다!')
       
        time.sleep(sec)
        return True   #   주소록 프로그램을 실행시킨다.
    
    # 틀리면
    else:
        print('로그인 실패!')
        print('아이디와 비밀번호를 확인해주세요!')
        return False  #   프로그램을 종료한다.


# 2. 사용자 추가
def addAddr():
    """사용자 추가"""
    print('>>> 사용자 추가 <<<')
    
    # 사용자 정보를 입력하는 부분
    name  = input('이름 : ')
    phone = input('전화번호 : ')
    email = input('이메일 : ')

    yesno = input('입력한 내용을 저장하겠습니까 ? (y/n  y or Enter:저장) : ')

    # if yesno == 'y' or yesno == 'Y' or yesno == '':
    if yesno in ('y', 'Y', ''):
        # 주소록 파일에 사용자 정보를 저장하는 부분
        try:
            with open(filename1, 'a', encoding='utf8') as f : # 파일 열기
                f.write(f'{name}\t{phone}\t{email}\n')  # 파일 쓰기
        except:
            print('파일 저장에 예외가 발생했습니다.')   
        else:
            print(f'{name} 사용자를 추가했습니다.')
    else:
        print(f'{name} 사용자 저장을 취소했습니다.')

# 3. 사용자 확인
def viewAddr():
    """사용자 확인"""
    print('>>> 사용자 확인 <<<')
    try:
        # 주소록 파일에서 사용자 정보를 읽어서 화면에 출력하는 부분
        with open(filename1, 'r', encoding='utf8') as f : # 파일 열기
            print(f.read())  # 파일 읽기
    # except FileNotFoundError as e:
    #	print(e)
    except FileNotFoundError:
        print('사용자를 먼저 추가해야 됩니다.')

# 4. 사용자 검색
def searchAddr():
    """사용자 검색"""
    print('>>> 사용자 검색 <<<')    

    foundUser = 0  # 1: 사용자가 존재하면,  0: 사용자가 존재하지 않다면
    name = input('사용자 : ')

    try:
        with open(filename1, 'r', encoding='utf8') as f:

            while True:
                user = f.readline()  # 한 줄을 읽어서 user변수에 저장한다.
                # 파일의 끝까지 가면 f.readline()으로 읽으면 값이 없으므로 
                # user 변수에 값이 없음(NULL)을 알 수 있다.           
                # if user == '':
                if not user:   # 파일의 끝이면
                    break      # 파일 읽는 것을 중지한다.
                
                searchName = user.split('\t')
                
                # if name in user:  # 사용자가 검색되면
                if name == searchName[0] :  # 사용자가 검색되면
                    print(user, end='')  # 사용자를 출력한다. (엔터제거)
                    foundUser = 1
        
        if foundUser == 0:
            print(name + ' 사용자가 없습니다.')
    except FileNotFoundError:
        print('사용자를 먼저 추가해야 합니다.')

# 5. 사용자 삭제
def deleteAddr():
    """사용자 삭제"""
    print('>>> 사용자 삭제 <<<')    

    foundUser = 0  # 1: 사용자가 존재하면,  0: 사용자가 존재하지 않다면
    name = input('사용자 : ')

    yesno = input('입력한 사용자를 삭제하겠습니까? (y/n default y) : ')
    if yesno in ('y', 'Y', '') :   # 삭제를 선택하면

        try:
            # 원본 파일 : 읽기 전용
            # 복사본 파일 : 쓰기 전용
            with open(filename1, 'r', encoding='utf8') as f:
                with open(filename2, 'w', encoding='utf8') as f2:

                    while True:
                        user = f.readline()  # 한 줄을 읽어서 user변수에 저장한다.
                        # 파일의 끝까지 가면 f.readline()으로 읽으면 값이 없으므로 
                        # user 변수에 값이 없음(NULL)을 알 수 있다.           
                        # if user == '':
                        if not user:   # 파일의 끝이면
                            break      # 파일 읽는 것을 중지한다.
                        
                        searchName = user.split('\t')
                        
                        # 사용자 검색 성공 : 임시 파일에 사용자를 복사하지 않는다.
                        # 사용자 검색 실패 : 임시 파일에 사용자를 복사한다.
                        # if name in user:  # 사용자가 검색되면
                        if name == searchName[0] :  # 사용자가 검색되면
                            foundUser = 1           # 사용자를 찾으면 표시한다.
                        else:                       # 사용자를 검색하지 못했다면                    
                            f2.write(user)          # 임시 파일로 복사한다.

            # https://docs.python.org/ko/3/library/os.html?highlight=os%20rename#os.rename
            # 파일 삭제 : os.remove(파일명)
            # 파일 이름 변경 : os.rename(원본파일명, 변경할파일명)
            # 사용자 검색에 실패했으면                        
            if foundUser == 0:
                os.remove(filename2)  # 임시 파일 삭제
                print(name + ' 사용자가 없습니다.')
            else:
                os.remove(filename1)  # 원본 파일 삭제
                os.rename(filename2, filename1)  # 임시파일 원본파일로 이름을 변경
                print(name + ' 사용자를 삭제했습니다.')
        except FileNotFoundError:
            print('사용자를 먼저 추가해야 합니다.')                
    else:
        print('사용자 삭제를 취소했습니다.')

# 6. 주소록 도움말
def helpAddr():
    """도움말"""
    print('>>> 주소록 도움말 <<<')    

    helpMsg  = "사용자 추가 : 사용자를 등록하는 기능\n"
    helpMsg += "사용자 확인 : 사용자를 출력하는 기능\n"
    helpMsg += "사용자 검색 : 사용자를 검색하는 기능\n"
    helpMsg += "사용자 삭제 : 사용자를 삭제하는 기능\n"
    helpMsg += "\n"
    helpMsg += "프로그램 제작 : 홍길동(hong@naver.com)\n"

    print(helpMsg)

# 7. 프로그램 정보
def aboutAddr():
    """프로그램 정보"""
    print('>>> 프로그램 정보 <<<')

    aboutMsg  = "주소록 프로그램\n"
    aboutMsg += "버전 : 0.1\n"
    aboutMsg += "프로그램 제작 : 홍길동(hong@naver.com)\n"

    print(aboutMsg)

# 8. 메뉴
def menuAddr():
    """주소록 프로그램 메뉴"""

    menu  = '1. 사용자 추가\n'
    menu += '2. 사용자 확인\n'
    menu += '3. 사용자 검색\n'
    menu += '4. 사용자 삭제\n'
    menu += '5. 프로그램 도움말\n'
    menu += '6. 프로그램 정보\n'
    menu += 'q. 프로그램 종료\n'
 
    return menu


# 9. 메인
# main 함수
def main():
    """main"""

    i = 1
    while i <= loginCount: 
        if loginAddr():  # 로그인 체크
           break
        i += 1
    else:
        print('프로그램 종료')
        exit()

    while True:
        os.system('cls')  # 화면 지우기
        print(menuAddr())  # 메뉴 출력
        x = input('선택 >>> ')  # 메뉴 입력

        # 메뉴 체크
        if   x == '1' :  # 사용자 추가
            addAddr()
        elif x == '2' :  # 사용자 확인
            viewAddr()    
        elif x == '3' :  # 사용자 검색
            searchAddr()
        elif x == '4' :  # 사용자 삭제
            deleteAddr()
        elif x == '5' :  # 프로그램 도움말
            helpAddr()
        elif x == '6' :  # 프로그램 정보
            aboutAddr()
        elif x == 'q' :  # 프로그램 종료
            print('주소록 프로그램을 종료합니다.')
            quit()
        else:            # 그외의 모든 값
            print('1 ~ 6 or q중에서 입력해야 합니다.')

        input()

main()
-- addressbook.py --


학습 목표 : 
2. 모듈의 개념을 파악하고 적용할 수 있다.


##########
## 모듈
##########

변수, 명령어 < 함수 (함수) < 클래스 < 모듈 < 패키지

모듈이란 함수나 변수 또는 클래스들을 모아놓은 파일이다.
모듈은 다른 파이썬 프로그램에서 불러와서 사용할 수 있게끔 만들어진 파이썬 파일이다.
모듈은 하나의 파이썬 파일이다.
모듈을 불러들일 때는 import 예약어를 사용한다.
import 할 모듈의 이름은 확장자 .py 가 제거된 파일명만 사용한다.
import 는 현재 디렉토리나 파이썬 라이브러리가 저장된 디렉토리에 있는 모듈만 불러온다.
파이썬 라이브러리 디렉토리를 확인하기 위해서는 sys.path를 확인하면 된다.
모듈 디렉토리는 설정은 환경변수 PYTHONPATH 를 사용한다.
모듈이 불려지면 컴파일된 모듈명.pyc 파일이 생성된다.


-- modulePath.py --
"""
파일명 : modulePath.py
프로그램 설명 : 모듈 디렉터리 확인
"""

import sys
print(sys.path)
-- modulePath.py --


--  moduleA.py --
"""
파일명 : moduleA.py
프로그램 설명 : 모듈 테스트
"""

def printA():
    a = 1
    print(a)

def printB():
    b = 2
    print(b)

# printA()
#printB()

# 직접 이 파일을 실행 : __main__
# 간접 이 파일을 실행 : moduleA
# print(__name__)  

if __name__ == '__main__':
    printA()  # 1
    printB()  # 2
--  moduleA.py --


-- moduleATest.py --
"""
파일명 : moduleATest.py
프로그램 설명 : 모듈 테스트
"""

# 1. 모듈을 불러들인다.
# 형식 : import 모듈명
import moduleA  # moduleA.py를 의미한다.

# 2. 모듈에 있는 함수를 호출(실행) 한다.
# 형식 : 모듈명.함수명()
# 형식 : 모듈명.변수명
# . 은 ~의라고 읽으면 된다.
moduleA.printA() 
moduleA.printB()
-- moduleATest.py --


모듈을 사용하는 방법
1. 모듈을 생성한다.
모듈은 파이썬파일과 동일하고 주로 이 안에는 단독으로 사용하는 것은 없어야 하고 
만약 사용하고 싶다면 아래처럼 if문으로 사용해야 한다.
if __name__ == '__main__':
    함수()

그리고 주로 변수, 함수, 클래스로 만든다.

2. 파이썬 파일에서 모듈을 가져온다.
import 모듈명   <-- .py는 생략한다.
from 모듈명 import 모듈함수
from 모듈명 import *

3. 모듈에 있는 함수, 클래스를 사용한다.
import 모듈명
가능 : 모듈명.함수명()
가능 : 모듈명.클래스명()
불가능 : 함수명() 사용할 수 없다.
불가능 : 클래스명() 사용할 수 없다.

from 모듈명 import 모듈함수
가능 : 모듈함수()
가능 : 클래스명()
불가능 : 모듈명.함수명() 사용할 수 없다.
불가능 : 모듈명.클래스명() 사용할 수 없다.

-- mod1.py --
"""
파일명 : mod1.py
프로그램 설명 : 첫 번째 모듈 테스트
"""

# 1. 모듈을 생성한다.
# 1. 함수 정의
def plus(a, b):
    print("plus() 함수 실행!!!")
    return a + b

def minus(a, b):
    print("minus() 함수 실행!!!")    
    return a - b

# __name__ : 파이썬에서 미리 저장된 변수명이고 그 값은 __main__ 값을 갖는다.
# 단독으로 파일을 실행할 경우에는 __main__ 이 출력이 된다.
# 모듈형태로 불러들었을 경우에는 mod1 이 출력이 된다.
# print(__name__)  # __main__
if __name__ == "__main__":
    print(plus(10, 20))    
    print(plus(10, 20) + 3)
    print(max(plus(10, 20), 35))
-- mod1.py --

-- mod1Test.py --
"""
파일명 : mod1Test.py
프로그램 설명 : mod1.py 를 모듈로 import해서 사용하는 예제
"""

# 2. 파이썬 파일에서 모듈을 가져온다.
import mod1  # mod1.py에서 .py는 생략

# 3. 모듈에 정의된 함수를 사용한다.
# plus(3,5) X
# minus(5,3) X
print(mod1.plus(3,5))   # 8
print(mod1.minus(5,3))  # 2
-- mod1Test.py --

-- mod2.py --
"""
파일명 : mod2.py 
프로그램 설명 : 모듈 테스트
"""

def function1():
    print("function1() 함수 실행!!!")

def function2():
    print("function2() 함수 실행!!!")

def function3():
    print("function3() 함수 실행!!!")

if __name__ == '__main__':
    function1()
    function2()
    function3()       
-- mod2.py --

-- mod2test.py --
"""
파일명 : mod2test.py
프로그램 설명 : mod2.py 를 모듈로 import해서 사용하는 예제
"""

# import mod2

# mod2.function1()  # import mod2를 했을 때 사용 가능
# mod2.function2()  # import mod2를 했을 때 사용 가능
# mod2.function3()  # import mod2를 했을 때 사용 가능

# 모듈명을 from 으로 불러들이는 형식 :
# from 모듈명 import 모듈함수
# 모듈함수 : 함수명, *
# 
# from으로 모듈을 불러들여서 사용하는 형식:
# 모듈이 생략되고 함수명()만 사용한다.

from mod2 import function1
function1()  # from mod2 import function1 사용 가능
# function2()  # from mod2 import function2 사용 불가능
# function3()  # from mod2 import function3 사용 불가능
# mod2.function1() # 사용 불가능
-- mod2test.py --

-- mod3test.py --
"""
파일명 : mod3test.py
프로그램 설명 : mod2.py 를 모듈로 import해서 사용하는 예제
"""

# mod2 모듈의 모든 함수를 사용할 때 *을 사용한다.
# from mod2 import *
# function1()  # from mod2 import * 했을 때 사용 가능
# function2()  # from mod2 import * 했을 때 사용 가능
# function3()  # from mod2 import * 했을 때 사용 가능

# mod2 모듈에서 function2(), function3()만 사용하고 싶을 때
from mod2 import function2, function3
#function1()  # from mod2 import * 했을 때 사용 뷸가능
function2()  # from mod2 import * 했을 때 사용 가능
function3()  # from mod2 import * 했을 때 사용 가능
-- mod3test.py --

-- mod4test.py --
"""
파일명 : mod4test.py
프로그램 설명 : mod2.py 를 모듈로 import해서 사용하는 예제
"""

# from 으로 모듈을 불러들이면 이름 충돌에 주의해야 한다.
# 참고 : 
# C++ 같은 언어에서는 함수명의 충돌을 방지하기 위해서 
# 네임스페이스(이름공간)라는 것을 사용한다.

# 주의 from 으로 모듈을 불러들일 경우에는 주의점은 
# __main__ 에 같은 함수가 존재하면 충돌이 나므로 특별한 경우가 아니라면
# import 모듈명  <-- 사용해서 모듈명.함수명() 사용하는 것을 추천한다.

from mod2 import *

def function1():
    print("^^") 

# from mod2 import *
function1()  # ^^
function2()  # function2() 함수 실행!!!
-- mod4test.py --

-- mod5.py --
"""
파일명 : mod5.py
프로그램 설명 : 클래스 정의 파일 예제
"""

class Test :
    def function1(self):
        print("인스턴스 function1() 실행!!!")

    def function2(self):
        print("인스턴스 function2() 실행!!!")

if __name__ == '__main__' :
    myObj = Test()
    myObj.function1()
    myObj.function2()
-- mod5.py --


-- mod5Test.py --
"""
파일명 : mod5Test.py
프로그램 설명 : mod5.py 를 모듈로 import해서 사용하는 예제
"""

# import 로 모듈을 사용하는 경우
# import mod5
# # mod5.function1() # 사용 불가능, 이유는 클래스이므로 ...

# # mod5.py의 Test 클래스의 인스턴스를 생성한다.
# testObj = mod5.Test() 
# testObj.function1()
# testObj.function2()

# from으로 모듈을 사용하는 경우
from mod5 import Test
testObj = Test() 
testObj.function1()
testObj.function2()
-- mod5test.py --

-- 점수관리프로그램2.py --
"""
파일명 : 점수관리프로그램2.py
프로그램 설명 : 점수 관리 프로그램
작성자 : 파이썬마스터
작성일 : 2021.8.28
"""

import os

class Jumsu:

    def __init__(self):
        """생성자"""
        self.filename = '점수관리프로그램.txt'

    def jumsuAdd(self):
        """점수 추가"""

        # 1. 점수 입력
        print("점수를 입력하세요.")
        kor  = input("국어 점수 : ")
        eng  = input("영어 점수 : ")
        math = input("수학 점수 : ")

        # 2. 점수 체크
        kor  = int(kor)  # if kor.isdigit()  else 0
        eng  = int(eng)  # if eng.isdigit()  else 0
        math = int(math) # if math.isdigit() else 0

        # 3. 점수 계산
        total = kor + eng + math  # 총점 
        #total = sum([kor, eng, math])  # 총점  
        average = total / 3  # 평균 

        # 4. 점수 출력
        print("\n===== 점수의 결과 =====\n"
            f"국어 점수 : {kor}\n"
            f"영어 점수 : {eng}\n"
            f"수학 점수 : {math}\n"
            f"총점 : {total}\n"
            f"평균 : {average:.2f}\n"
            "===== 점수의 결과 =====")

        # 5. 파일 저장

        with open(self.filename, 'a', encoding='utf8') as f:
            f.write("===== 점수의 결과 =====\n"
                f"국어 점수 : {kor}\n"
                f"영어 점수 : {eng}\n"
                f"수학 점수 : {math}\n"
                f"총점 : {total}\n"
                f"평균 : {average:.2f}\n"
                "===== 점수의 결과 =====\n\n")

        print(f'{self.filename} 파일로 점수를 저장했습니다.')
        print('엔터키를 누르세요...')
        input()

    def jumsuView(self):
        """점수 확인"""
        
        try:
            # 점수 파일 읽기
            with open(self.filename, 'r', encoding='utf8') as f:
                print(f.read())
        except:
            print('먼저 점수를 추가해야 됩니다.')

        print('엔터키를 누르세요...')
        input()

    def jumsuMenu(self):
        """메뉴"""
        menu  = '>>> 점수 관리 프로그램 <<<\n'
        menu += '1. 점수 추가\n'
        menu += '2. 점수 확인\n'
        menu += 'q. 프로그램 종료'
        
        print(menu)

    def main(self):
        """main 함수"""

        while True:

            os.system('cls')  # 화면 지우기

            self.jumsuMenu()
            x = input('선택 >>> ')  # 메뉴 입력

            # 메뉴 체크
            if   x == '1' :
                self.jumsuAdd()
            elif x == '2' :
                self.jumsuView()
            elif x == 'q' : 
                break
            else:
                print('1, 2, q 중에서 입력하세요.')

if __name__ == '__main__':
    jumsu = Jumsu()
    jumsu.main()
    print('점수 관리 프로그램을 종료합니다.')    
-- 점수관리프로그램2.py --

-- mod5Test.py --
# 점수관리프로그램_class.py 를 불러들여서 실행시킨다.

# 점수관리프로그램_class.py 를 불러들여서
# 실행시킨다.

# import 점수관리프로그램_class as a
# jumsu = a.Jumsu()
# jumsu.main()

from 점수관리프로그램_class import Jumsu as J
jumsu = J()
jumsu.main()

-- mod5Test.py --

-- mod6Test.py --
"""
파일명 : mod6Test.py
프로그램 설명 : 점수 관리 프로그램을 모듈로 가져오는 예제
"""

# 모듈을 별명을 지정해서 사용할 때 
# 형식 : 
# import 모듈명 as 별명
# from 모듈명 import 함수 as 별명
# from 모듈명 import 클래스 as 별명

# import 점수관리프로그램2 as jumsu
# myJumsu = jumsu.Jumsu()
# myJumsu.main()

from 점수관리프로그램2 import Jumsu as jumsu
myJumsu = jumsu()
myJumsu.main()
-- mod6Test.py --


파이썬 코드에서 다른 모듈을 불러오면 __pycache__ 디렉터리에 컴파일된 파일이 생성된다.
파일명 : 
mod1.py -> mod1.cpython-311.pyc
mod2.py -> mod2.cpython-311.pyc
profile
정보보안 전문가

0개의 댓글