63. 파이썬 내장 함수 hex id input int isinstance

63. 파이썬 내장 함수 hex id input int isinstance

지난 포스팅에서 파이썬 내장 함수 중 enumerate eval filter 함수에 대해 공부 해 보았습니다.
이번 포스팅에서는 파이썬 내장 함수 hex id input int 함수에 대해 공부 해 보도록 하겠습니다.

파이썬 내장 함수

hex

hex 내장 함수는 숫자(정수)를 입력 받아서 16진수의 문자열(hexadecimal)로 변환해서 리턴을 해 주는 함수 입니다.

Python
>>> hex(123)
'0x7b'
>>>

hex 내장 함수의 경우는 그냥 입력하는 대로 16진수로 결과를 보여주기 때문에 더 설명은 필요가 없을 것 같습니다.

id

id 내장 함수는 객체(object)를 입력을 받아서 객체가 가지고 있는 고유 주소의 값. 레퍼런스 라고 하는 값을 리턴을 해주는 함수입니다.

Python
>>> a = 3
>>> id(3)
1423013970224
>>> id(a)
1423013970224
>>> b = a
>>> id(b)
1423013970224
>>>

위 코드를 보면 아시겠지만 3, a, b 의 고유 주소값은 모두 1423013970224 입니다.
이 말은 3, a, b 가 모두 같은 객체를 가리키고 있다는 말입니다.
만약에 id(4) 라고 입력을 하게 된다면 4 는 기존 3, a, b 와는 다른 객체이므로 당연히 다른 고유 주소 값을 리턴을 하게 될 것입니다.

Python
>>> id(4)
1423013970256

input

input 함수는 프롬프트에서 사용자 입력을 받게 해주는 함수입니다.

input([프롬프트])

입력 값으로 문자열을 전달하게 되면 그 문자열은 프롬프트가 됩니다.
그리고 [] 기호는 괄호 안의 내용을 생략할 수 있다는 관례 표기법 임을 감안해서 생각하시면 됩니다.

Python
>>> a = input()
hello
>>> a
'hello'
>>> b = input("Enter : ")
Enter : hello
>>> b
'hello'
>>>

a 라는 변수에 input() 함수를 대입을 하게 되면 바로 입력을 할 수 있게 나옵니다.
거기에 입력된 값을 a 변수의 값이 됩니다.
b 라는 변수에서는 그냥 값을 입력만 하는게 아니라 값을 입력할 수 있는 문장을 출력을 하면 입력을 받게 됩니다.
결과는 a 와 동일하게 진행이 됩니다.

int

int 내장 함수는 integer 즉 정수를 리턴하는 내장 함수로 문자열 형태로 입력받는 숫자나 소수점이 있는 숫자를 정수로 리턴을 하게 됩니다.
만약 정수가 입력된다면 별 변화없이 당연히 그냥 정수값 그대로 리턴을 하게 됩니다.

Python
>>> int('5')
5
>>> int(3.14)
3
>>>

int 내장 함수는 위 코드처럼 단순하게 숫자나 문자열을 정수로 리턴을 해주는 기능 외에도 다른 기능이 있습니다.

Python
>>> int('111', 2)
7

위 코드는 2진수로 입력된 ‘111’ 값을 10진수로 표현한 결과입니다.
이처럼 int(x, radix) 라고 입력을 하면 radix 진수로 표현된 문자열 x 를 10진수로 변환해서 리턴을 해 줍니다.

Python
>>> int('1A', 16)
26

위 코드는 이전에서 2진수로 입력했던 것을 16진수로 입력을 한 결과입니다.
16진수 1A 값을 10진수인 26으로 변환해서 리턴을 해주었습니다.

isinstance

isinstance 내장 함수는 isinstance(object, class)의 형태로 입력을 받고 첫 번째 인수로 객체, 두 번째 인수로 class 를 입력을 받게 됩니다.
입력으로 받은 객체가 해당 클래스의 인스턴스 인지를 판단하고 참이면 True, 거짓이면 False 를 리턴을 하게 됩니다.

Python
>>> class Person: pass
...
>>> a = Person()
>>> isinstance(a, Person)
True
>>>

위 코드처럼 a 객체가 Person 클래스의 의해 생성된 인스턴스 임을 확인해 볼 수 있습니다.

Python
>>> b = 3
>>> isinstance(b, Person)
False
>>>

b 라는 객체는 Person 클래스가 만든 인스턴스가 아니라 False 를 리턴하는 것을 확인 할 수 있습니다.

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
63. 파이썬 내장 함수 hex id input int

62. 파이썬 내장 함수 enumerate eval filter

지난 포스팅에서 파이썬의 dir divmod 이라는 내장 함수에 대해 간략하게 살펴 보았습니다.
이번 포스팅에서는 파이썬 내장 함수 중 enumerate eval filter 함수에 대해 공부해 보도록 하겠습니다.

파이썬 내장 함수

enumerate

enumerate 의 의미는 열거하다 라는 의미입니다.
enumerate 함수는 순서가 있는 리스트나 튜플, 문자열의 데이터를 입력으로 받고 그 인덱스 값을 포함하는 enumerate 라는 객체를 리턴하게 됩니다.

Python
>>> for i, name in enumerate(['body', 'foo', 'bar']):
...     print(i, name)
...
0 body
1 foo
2 bar
>>>

[‘body’, ‘foo’, ‘bar’] 라는 리스트를 for 문장을 통해 리스트 객체수 만큼 반복문을 돌려주면서 i 라는 변수를 통해 리스트의 0 번째, 1 번째, 2 번째가 가지고 있는 요소. name 을 출력하게끔 해봤습니다.
그 결과 리스트의 주소값과 함께 ‘body’, ‘foo’, ‘bar’ 가 순서대로 출력이 되었습니다.
위 예 처럼 enumerate 내장 함수는 for 문과 함께 사용하면 자료형의 현재 순서, 즉 index 와 그 값을 쉽게 알아 볼 수 있습니다.

eval

eval 내장 함수는 문자열로 구성되어 있는 표현식을 입력으로 받아 해당하는 문자열을 실행한 결과값을 리턴을 해 주는 함수 입니다.

Python
>>> eval('2+3')
5
>>> eval("'hello' + 'python'")
'hellopython'
>>> eval('divmod(5, 3)')
(1, 2)
>>>

filter

filter 라는 단어는 많이 낯이 익을 겁니다. 뭔가를 걸러낸다는 의미 이기 때문입니다.
filter 내장 함수도 의미와 같은 기능을 가지고 있습니다.

filter(func, iterable)

filter 내장 함수는 첫 번째로 함수를, 그리고 두 번째로 그 함수에 차례대로 들어가게 될 반복 가능한 데이터를 인수로 받습니다.
그리고 반복 가능한 데이터(iterable)의 요소의 순서대로 함수(func)를 호출했을 때의 결과값이 참인 것들만 묶어서(filtering) 리턴을 하게 됩니다.

Python
# positive.py
def positive(l):
    result = []
    for i in l:
        if i > 0:
            result.append(i)
    return result

print(positive([1, -3, 2, 0, -5, 6]))

위 코드를 실행해 보겠습니다.

Python
(py_study_31010) D:\Dropbox.My_Job.Study.Python
(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python positive.py
[1, 2, 6]
.study_python_3.11.0.TEST>python positive.py
[1, 2, 6]

결과값으로 [1, 2, 6]의 리스트를 출력을 하게 됩니다.
코드를 살펴보시면 아시겠지만 if i > 0 이라는 문장을 통해 리스트를 입력을 받아서 최종 출력은 양의 정수만을 리턴을 하게하는 함수 입니다.

위 코드를 filter 내장 함수를 사용해서 작성을 해보겠습니다.

Python
# filter1.py
def positive(x):
    return x > 0

print(list(filter(positive, [1, -3, 2, 0, -5, 6])))

Python
(py_study_31010) D:\Dropbox.My_Job.Study.Python
(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python filter1.py
[1, 2, 6]
.study_python_3.11.0.TEST>python filter1.py
[1, 2, 6]

이전에 작성했던 코드와 마찬가지로 결과값으로 [1, 2, 6]의 리스트를 출력을 하게 됩니다.
filter(positive, [1, -3, 2, 0, -5, 6]) 라는 문장은 [1, -3, 2, 0, -5, 6] 리스트의 각 요소값들 중 순서대로 positive 함수에 적용하여 결과값이 참이 되는 것들만 묶어서 리턴을 하게 됩니다.
결국 위 결과처럼 1, 2, 6 이라는 숫자만이 x > 0 의 조건문에 참이 되므로 [1, 2, 6] 이라는 결과값이 출력이 되는 것 입니다.

lambda 를 사용하면 더 간단하게 작성이 가능해 집니다.

Python
>>> list(filter(lambda x: x > 0, [1, -3, 2, 0, -5, 6]))
[1, 2, 6]
>>>

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
62. 파이썬 내장 함수 enumerate eval filter

60. 파이썬 내장 함수 abs all any chr

60. 파이썬 내장 함수 abs all any chr

지난 포스팅 까지 파이썬에서 예외 처리를 하는 방법 들에 대해서 공부를 해봤습니다.
이번 포스팅 부터는 파이썬 내장 함수에 대해 공부를 진행해 보도록 하겠습니다.
먼저 abs, all, any, chr 등의 내장 함수 입니다.

파이썬 내장 함수

이미 만들어진 프로그램 살펴 보기

파이썬으로 프로그램을 만들기 전에 만들려 하는 프로그램이 이미 만들어져 있을 수도 있기 때문에 먼저 찾아 보기를 바랍니다.
단순히 공부를 하기 위해서 라면 만들어져 있는 프로그램을 다시 만들어도 상관은 없을 것입니다.
하지만 그런게 아니라면 이미 만들어져 있는 프로그램을 다시 만드느라 시간을 낭비할 필요는 없을 것 입니다.
그리고 이미 만들어진 프로그램들은 이미 테스트 과정들을 많이 거쳤기 때문에 검증이 충분히 되어있을 수 있습니다.
특히 파이썬 배포본에 함께 들어 있는 파이썬 라이브러리를 살펴보는 것은 매우 중요합니다.

파이썬 내장 함수 설정

이렇게 파이썬 라이브러리를 살펴 보기 전에 파이썬 내장 함수(Built-in 빌트인 함수)를 먼저 살펴 보겠습니다.
이전에 이미 몇가지의 내장 함수를 공부한 적이 있습니다.
print, del, type 등의 내장 함수 입니다.
이러한 파이썬 내장 함수 들은 파이썬 모듈과는 다르게 import 를 할 필요가 없기 때문에 아무 설정 없이 바로 사용을 할 수가 있습니다.

이번 포스팅 부터 내장 함수에 대해 알파벳 순으로 간단히 살펴보는 시간을 가지도록 해 보겠습니다.

abs

abs 내장 함수는 어떤 숫자를 입력받았을 때 해당 숫자의 절대값을 출력해 주는 함수입니다.

Python
>>> abs(5)
5
>>> abs(-5)
5
>>> abs(-2.5)
2.5

all

all 내장 함수는 반복이 가능한 데이터(iterable)를 입력값으로 받아서 입력받은 값의 요소가 모두 참이면 True, 거짓이하나라도 있으면 False 를 리턴을 하게 됩니다.(반복 가능한 데이터라는 것은 for 문에서 사용 가능한 자료형을 의미하는데 리스트, 튜플, 문자열, 딕셔너리, 집합 등이 있습니다.)

Python
>>> all([1, 2, 3])
True

위 코드에서 리스트 [1, 2, 3] 은 모든 요소가 참입니다.
그래서 True 를 리턴을 하게 됩니다.

Python
>>> all([1, 2, 3, 0])
False

위 코드에서 리스트 [1, 2, 3, 0] 중 요소 0 은 거짓이므로 False 를 리턴을 하게 됩니다.

Python
>>> all([])
True

위 코드에서 all 의 입력된 인수가 빈 값일 경우에는 True 를 리턴을 하게 됩니다.

any

any 내장 함수는 all 과 마찬가지로 반복이 가능한 데이터(iterable) 를 입력을 받습니다.
그러나 any 의 경우에는 요소 중에 하나라도 참이 있으면 True 를 리턴을 하고 요소들이 모두 거짓일 때에만 False 를 리턴을 하게 됩니다.
all 함수와는 반대의 개념입니다.

Python
>>> any([1, 2, 3, 0])
True

리스트 [1 ,2 ,3, 0] 중에서 1, 2, 3 이 참이기 때문에 True 를 리턴을 하게 됩니다.

Python
>>> any([0, ""])
False

리스트 [0, “”]의 요소 0 과 “” 는 모두 거짓입니다.
따라서 False 를 출력을 하게 됩니다.

Python
>>> any([])
False

위의 경우에는 all 과는 반대로 입력 인수가 빈 값일 경우에 False 를 리턴을 하게 됩니다.

chr

chr 내장 함수는 유니코드의 숫자값을 입력을 받아서 그 코드에 해당하는 문자를 리턴을 해주는 함수 입니다.
유니코드는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준입니다.

Python
>>> chr(97)
'a'
>>> chr(44032)
'가'
>>>

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
60. 파이썬 내장 함수 abs all any chr

59. 파이썬 예외 만들기 – 예외 처리 #5

59. 파이썬 예외 만들기 – 예외 처리 #5

지난 시간에는 파이썬 예외 처리 중 오류 회피 하는 방법과 오류를 일부러 발생시키는 방법에 대해 알아보았습니다. 이번 포스팅에서는 예외 처리의 이어지는 내용으로 예외 만들기에 대해 공부해 보도록 하겠습니다.

파이썬 예외 처리 #5

파이썬 예외 만들기

프로그램을 수행 하는 도중에 특수한 경우에만 예외 처리를 하기 위해서는 가끔 예외를 만들어서 사용을 하게 됩니다.
그런 예외를 직접 만들어 보겠습니다.
예외는 아래 코드와 같이 파이썬에 내장 클래스인 Exception 클래스를 상속하여 만들 수 있습니다.

Python
class CodingError(Exception):
    pass

아래와 같이 별명을 출력하는 함수를 만들어 보겠습니다.

Python
def say_nick(nick):
    if nick == '악마':
        raise CodingError()
    print(nick)

say_nick("천사")
say_nick("악마")

위 코드를 실행을 해보면 아래와 같이 “천사” 라는 단어를 한 번 출력 시킨 후 CodingError 가 발생을 하게 됩니다.

Python
(py_study_31010) D:\Dropbox.My_Job.Study.Python
(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python test.py
천사
Traceback (most recent call last):
  File "D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\test.py", line 206, in <module>
    say_nick("악마")
  File "D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\test.py", line 202, in say_nick
    raise CodingError()
__main__.CodingError
.study_python_3.11.0.TEST>python test.py
천사 Traceback (most recent call last): File "D:\Dropbox.My_Job.Study.Python
(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python test.py
천사
Traceback (most recent call last):
  File "D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\test.py", line 206, in <module>
    say_nick("악마")
  File "D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\test.py", line 202, in say_nick
    raise CodingError()
__main__.CodingError
.study_python_3.11.0.TEST\test.py", line 206, in <module>
say_nick("악마") File "D:\Dropbox.My_Job.Study.Python
(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python test.py
천사
Traceback (most recent call last):
  File "D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\test.py", line 206, in <module>
    say_nick("악마")
  File "D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\test.py", line 202, in say_nick
    raise CodingError()
__main__.CodingError
.study_python_3.11.0.TEST\test.py", line 202, in say_nick
raise CodingError() __main__.CodingError

이번에는 예외 처리 기법을 사용해서 CodingError 발생을 예외 처리를 해 보겠습니다.

Python
def say_nick(nick):
    if nick == '악마':
        raise CodingError()
    print(nick)

try:
    say_nick("천사")
    say_nick("악마")
except CodingError:
    print("이 별명은 허용되지 않은 별명입니다.")

기존에 있던 코드에 try … except 구문을 사용해서 예외 처리를 해주었습니다.
위 코드를 실행해 보면 아래처럼 출력이 됩니다.

Python
(py_study_31010) D:\Dropbox.My_Job.Study.Python
(py_study_31010) D:\Dropbox.My_Job.Study.Python
(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python test.py
천사
이 별명은 허용되지 않은 별명입니다.
.study_python_3.11.0.TEST>python test.py
천사 이 별명은 허용되지 않은 별명입니다.
.study_python_3.11.0.TEST>python test.py
천사 이 별명은 허용되지 않은 별명입니다.

만약에 여기서 나오는 오류 메시지를 사용을 하고 싶다면 아래 코드와 같이 예외 처리를 해 주면 됩니다.

Python
try:
    say_nick("천사")
    say_nick("악마")
except CodingError as e:
    print(e)

하지만 막상 프로그램을 실행을 해보게 되면 print(e) 로 오류 메시지가 출력이 되지를 않습니다.

Python
(py_study_31010) D:\Dropbox.My_Job.Study.Python
(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python test.py
천사
.study_python_3.11.0.TEST>python test.py
천사

오류 메시지를 출력했을 때 오류 메시지가 보이게 하려면 오류 클래스에 아래 처럼 __str__ 메서드를 구현을 해야 합니다.
__str__ 메서드는 print(e) 처럼 오류 메시지를 print 문으로 출력할 경우에 호출 되는 메서드입니다.
최종 코드는 아래와 같습니다.

Python
class CodingError(Exception):
    def __str__(self):
        return "이 별명은 허용되지 않은 별명입니다."

def say_nick(nick):
    if nick == '악마':
        raise CodingError()
    print(nick)

try:
    say_nick("천사")
    say_nick("악마")
except CodingError as e:
    print(e)

이제 위 코드를 다시 실행을 해보게 되면 “이 별명은 허용되지 않은 별명입니다.” 라는 오류메시지를 출력하는걸 확인 할 수 있습니다.

Python
(py_study_31010) D:\Dropbox.My_Job.Study.Python
(py_study_31010) D:\Dropbox.My_Job.Study.Python
(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python test.py
천사
이 별명은 허용되지 않은 별명입니다.
.study_python_3.11.0.TEST>python test.py
천사 이 별명은 허용되지 않은 별명입니다.
.study_python_3.11.0.TEST>python test.py
천사 이 별명은 허용되지 않은 별명입니다.

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
59. 파이썬 - 예외 처리 #5 예외 만들기

58. 파이썬 – 예외 처리 #4 오류 회피 와 오류 발생시키기

58. 파이썬 – 예외 처리 #4 오류 회피 와 오류 발생시키기

지난 시간에 계속해서 파이썬에서 예외 처리 하는 방법들에 대해 알아보았습니다.
이번 포스팅에서는 예외 처리의 이어지는 내용으로 오류 회피와 오류 발생시키기에 대해 공부해 보도록 하겠습니다.

파이썬 예외 처리 #4

파이썬 오류 회피

프로그램 코딩을 하다 보면 어떤 특정 오류가 발생할 경우에는 그 오류는 그냥 통과 시켜야 할 경우도 발생을 하게 됩니다.

Python
>>> try:
...     f = open("없는 파일 선택 함", 'r')
... except FileNotFoundError:
...     pass
...
>>>

위 코드처럼 try 문장에서 FileNotFoundError 오류가 발생을 할 경우에 Pass 문장을 통해서 오류를 그냥 통과해서 오류 회피를 할 수가 있습니다.

파이썬 오류 발생시키기

오류 발생시키기는 일부러 오류를 발생 시키는 경우를 말합니다.
왜 오류를 일부러 발생 시킬까요?
오류 회피와 마찬가지로 프로그래밍을 하다 보면 간간이 나오는 경우입니다.

파이썬에서는 raise 명령을 사용해서 오류를 강제로 발생 시킬 수가 있습니다.
아래 예를 사용해 보겠지만 Bird 클래스를 상속받는 자식 클래스는 무조건 fly 라는 함수를 구현하게끔 만들고 싶은 경우가 있을 수 있습니다.
(강제로 그렇게 하고 싶은 경우)
아래 코드를 살펴 보겠습니다

아래 코드 예제는 Bird 클래스를 상속 받는 자식 클래스는 무조건 적으로 fly 함수를 구현해야 한다는 강한 의지를 보여주는 코드 예제입니다.
여기서 만약 자식 클래스가 fly 함수를 구현하지 않고 fly 함수를 호출을 하게 되면 어떻게 될까요?

Python
class Bird:
    def fly(self):
        raise NotImplementedError
        
class Eagle(Bird):
    pass

eagle = Eagle()
eagle.fly()

Python
예외가 발생했습니다. NotImplementedError
exception: no description
  File "D:\Dropbox.My_Job.Study.Python
예외가 발생했습니다. NotImplementedError
exception: no description
  File "D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\test.py", line 178, in fly
    raise NotImplementedError
  File "D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\test.py", line 184, in <module>
    eagle.fly()
NotImplementedError: 
.study_python_3.11.0.TEST\test.py", line 178, in fly
raise NotImplementedError File "D:\Dropbox.My_Job.Study.Python
예외가 발생했습니다. NotImplementedError
exception: no description
  File "D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\test.py", line 178, in fly
    raise NotImplementedError
  File "D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\test.py", line 184, in <module>
    eagle.fly()
NotImplementedError: 
.study_python_3.11.0.TEST\test.py", line 184, in <module>
eagle.fly() NotImplementedError:

파이썬에서 NotImplementedError 오류는 미리 정의가 되어 있는 오류입니다.
반드시 작성해야 하는 부분이 구현되지 않았을 경우를 대비해 일부러 오류를 발생시키기 위해서 사용이 됩니다.

그리고 위 코드를 살펴보게 되면 Eagle 클래스는 Bird 클래스를 상속을 받았습니다.
그에 따라서 eagle 객체의 fly 메서드를 수행하는 순간에 Bird 클래스의 fly 메서드가 수행이 되면서 NotImplementedError 오류가 발생을 하게 됩니다.
상속 받는 클래스에서 메서드를 재구현 하는 것을 오버라이딩이라고 합니다.

위 처럼 NotImplementedError 오류가 발생하지 않게 하려면 아래처럼 Eagle 클래스에 fly 함수를 구현을 해야 합니다.

Python
class Bird:
    def fly(self):
        raise NotImplementedError
        
class Eagle(Bird):
    def fly(self):
        print("very very fast")

eagle = Eagle()
eagle.fly()

Python
very very fast

위 코드처럼 구현을 하게 되면 프로그램을 실행했을 때 아무런 오류 없이 vary very fast 문장을 출력하게 됩니다.

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
58. 파이썬 - 예외 처리 #4 오류 회피 와 오류 발생시키기

57. 파이썬 – 예외 처리 #3 try .. finally 와 try … else

57. 파이썬 – 예외 처리 #3 try .. finally 와 try … else

지난 포스팅에서 예외 처리 상황과 대처 방법에 대해서 공부를 했고 이번 포스팅에서도 파이썬 예외 처리 중 try .. finally 와 try … else 에 대해 공부해 보도록 하겠습니다

파이썬 예외 처리 #3

예외 처리 상황과 대처 방법

try .. finally

try 문에는 finally 절을 사용할 수 있습니다.
finally 절은 try 문을 수행 하는 도중에 예외가 발생 하는것과 상관 없이 항상 수행을 하게 됩니다.
일반적으로 finally 문장은 사용했던 리소스를 close 할 때 많이 사용하게 됩니다

Python
try:
    f = open('foo.txt', 'w')
    # 무 언 가 를 수 행 한 다.

    (... 생 략 ...)

finally:
    f.close() # 중간에 오류가 발생하더라도 무조건 실행 되게 됩니다..

위 코드에서 처럼 foo.txt 파일을 예전에 공부했던 대로 쓰기 모드(‘w’) 로 열어 준 후에 try 문을 수행하게 되면 예외가 발생하는 것과는 관계없이 finally 문장에서 f.close() 로 열려 있던 파일을 닫을 수가 있습니다.

여러 개의 오류 처리

여러 개의 오류를 처리 하기 위해서 try 문을 사용하는 방법입니다.

Python
try:
    ...
except 발생하는 오류 1:
    ...
except 발생하는 오류 2:
    ...

위에서 처럼 try 문을 사용하는 방법을 사용하여 이전에 0 으로 나누었을 때 발생하는 오류와 인덱싱 오류를 아래와 같이 처리 할 수 있습니다.

Python
>>> try:
...     a = [1,2]
...     print(a[3])
...     4/0
... except ZeroDivisionError as e:
...     print(e)
... except IndexError as e:
...     print(e)
...
list index out of range
>>>

일단 위처럼 실행을 하게 되면 list index out of range 오류 메시지가 출력이 됩니다.
그리고 아래 코드와 같이 ZeroDivisionError 와 IndexError 오류를 함께 처리 할 수가 있습니다.

Python
>>> try:
...     a = [1, 2]
...     print(a[3])
...     4/0
... except (ZeroDivisionError, IndexError) as e:
...     print(e)
...
list index out of range
>>>

위 코드처럼 2개 이상의 오류를 함께 처리하기 위해서 괄호를 사용해서 함께 묶어서 처리를 할 수가 있습니다.
list index out of range 오류의 경우는 이전 포스팅에서 말씀드린대로 리스트의 주소는 0 부터 시작하는데 실제로 리스트의 갯수는 2개만 있으므로 a[3] 은 리스트에 없는 주소임을 나타내 주는 오류 입니다.

try … else

try 문에서도 if 문장 에서 처럼 else 문장을 사용 할 수가 있습니다.

Python
try:
    ...
except [발생 오류 [as 오류 변수]]:
    ...
else # 오류가 없을 경우에만 수행이 됩니다.
    ...

위 코드처럼 try 문을 수행을 하다가 오류가 발생 하게 되면 except 문장이 수행이 되며 오류가 없다면 다음에 있는 else 문장이 실행이 됩니다.

try .. else 예제

다음 코드를 살펴 보겠습니다.

Python
>>> try:
...     age = int(input('나이를 입력 해 주세요 :'))
... except:
...     print('입력한 나이가 정확하지 않습니다.')
... else:
...     if age <= 18:
...         print('미성년자는 출입이 제한됩니다.')
...     else:
...         print('성인은 환영합니다~')
...
나이를 입력 해 주세요 :열다섯
입력한 나이가 정확하지 않습니다.
>>>

위 코드 숫자가 아닌 문장을 입력하게 되면 ‘입력한 나이가 정확하지 않습니다.’ 라는 문장을 출력을 하게 됩니다.
이렇게 오류가 없을 경우에만 else 문장이 실행이 됩니다.

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
57. 파이썬 - 예외 처리 #3 try .. finally 와 try … else

56. 파이썬 – 예외 처리 #2 예외 처리 상황과 대처 방법

56. 파이썬 – 예외 처리 #2 예외 처리 상황과 대처 방법

지난 시간까지 relative 패키지가 어떤 건지 알아보고 예외 처리에 대해 간단히 살펴봤습니다.

이번 포스팅에서는 예외 처리 상황과 대처 방법에 대해 알아보도록 하겠습니다.

파이썬 예외 처리 #2

예외 처리 상황과 대처 방법

0 으로 나누기. ZeroDivisionError

사칙연산 중에 나누기 를 할 때 이전의 예에서도 여러번 접해봤지만
0으로 나누는 경우에는 ZeroDivisionError 를 만나는 경우를 봤었습니다.
프로그래밍 중에 나누기가 들어간다면 꼭 확인하고 넘어가야 하는게 0 으로 나누기 를 하는 경우입니다.

정말 자주 발생하는 오류 중에 하나입니다.

Python
>>> 3/0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>>

위 코드에서는 3 을 0 으로 나누려 해봤습니다.
바로 ZeroDivisionError 오류가 발생 하게 됩니다.

IndexError

자주 발생하는 오류 중에 하나입니다.

Python
>>> a = [1, 2, 3]
>>> a[4]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>>

a 라는 리스트에는 [1, 2, 3]의 값이 저장되어 있습니다.
이전에 공부해 봤던 것처럼 파이썬에서 주소는 0 부터 시작을 하게 됩니다.
여기서 a[4] 는 실제로 a 라는 리스트의 주소 중 다섯 번째 주소를 의미합니다.
a 리스트에는 3개의 값만이 할당이 되어 있기 때문에 a[4] 는 나올 수가 없는 값입니다.
결국 IndexError 오류가 발생하게 됩니다.

이런 오류가 발생하게 되면 파이썬은 실행 중이던 프로그램을 중단을 하고 그에 맞는 오류 메세지를 보여 주게 됩니다.

오류 처리 예외 기법

원활한 프로그램을 작성하기 위해서는 오류 처리 방법을 잘 알아야 합니다.

try, except 문

try, except 문은 오류를 처리 하기 위한 예외 기법으로 많이 사용을 하고 있습니다.
아래는 try, except 문의 기본적인 구조입니다.

Python
try:
    ...
except [발생하는 오류 [as 오류 변수]]:

try 문장 수행을 하던 도중 만약 오류가 발생을 하게 되면 except 문장으로 가게 됩니다.
만일 try 문장을 수행을 하던 도중 오류가 발생하지 않는 다면 except 문장은 실행이 되지 않습니다.

except 문장의 구조를 살펴 보겠습니다.

Python
except[발생오류 [as 오류 변수]]:

위 except 문의 구조를 보시다 시피 [] 기호를 사용하게 됩니다.
이 [](대괄호) 기호는 괄호 안의 내용을 생략할 수 있다는 관례적인 표기법입니다.
따라서 아래 처럼 except 문은 3 가지로 사용 할 수가 있습니다.

1. try, except 만 사용하기
Python
try:
    ...
except 발생 오류:
    ...

이런 경우에는 오류와 상관없이 오류가 발생 하게 되면 except 블록을 수행 하게 됩니다.

2. 발생 오류만 포함하는 except 문
Python
try:
    ...
except 발생오류:
    ...

위 같은 경우에는 오류가 발생할 경우에 except 문에 미리 정해 놓은 오류와 동일한 오류일 경우에만 except 블록을 수행한다는 뜻입니다.

3. 발생 오류와 오류 변수까지 포함한 except 문
Python
try:
  ...
except 발생 오류 as 오류 변수:
    ...

이런 경우에 오류의 내용까지 알고 싶을 때 사용하는 방법입니다.
아래 코드를 살펴 보겠습니다.

Python
try:
    5 / 0
except ZeroDivisionError as e:
    print(e)

이전에 ZeroDivisionError 오류가 발생하는 경우를 살펴봤는데 위 코드처럼 except 문에 ZeroDivisionError 오류가 발생할 경우에 예외 처리를 하게 되면 ZeroDivisionError 오류가 발생을 하게 되면 except 문장이 실행이 되고 오류 변수 e 에 담기게 되는 오류 메시지를 출력을 할 수 있게 됩니다.
출력한 오류 메시지입니다.

Python
division by zero

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
56. 파이썬 – 예외 처리 #2 예외 처리 상황과 대처 방법

52. 파이썬 – 패키지의 정의와 만드는 방법

52. 파이썬 – 패키지의 정의와 만드는 방법

지난 포스팅에서는 파이썬에서 모듈을 불러오는 다른 방법에 대해 공부해 봤습니다.
이제 파이썬 패키지에 대해 공부를 해 볼텐데요
먼저 패키지의 정의와 패키지 만드는 방법에 대해 공부해 보도록 하겠습니다.

파이썬 패키지

패키지의 정의

패키지의 정의에 대해 먼저 알아 보겠습니다. 패키지는 Packages 로 도트(.) 를 사용하여 파이썬의 모듈들을 계층적 디렉터리 구조 형태로 관리를 할 수 있게 끔 해줍니다.
예로 모듈 이름이 AAA.BBB 인 경우에 A 는 패키지 이름이 되며, BBB 는 A 패키지의 B 모듈이 되는 것 입니다.
여기에서 나오는 파이썬에서 모듈의 이전에 공부 했듯이 하나의 파이썬 파일(.py) 입니다

파이썬에서 패키지는 디렉터리와 파이썬 모듈로 이루어 집니다.

패키지의 구조

패키지의 구조를 살펴보면 아래 와 같습니다.
가상으로 game 이란 패키지의 예를 보겠습니다.

Python
game/
    __init___.py
    sound/
        __init__.py
        echo.py
        wav.py
    graphic/
        __init__.py
        screen.py
        render.py
    play/
        __init__.py
        run.py
        test.py

위의 패키지 예를 보게 되면 game, sound, graphic, play 는 디렉터리이고 확장자가 .py 인 파일들은 파이썬 모듈입니다.
game 디렉터리가 이 패키지의 루트 디렉터리이고 sound, graphic, play 는 서브 디렉터리입니다.

간단한 파이썬 프로그램이라면 굳이 이렇게 패키지로 구조로 만들 필요가 없겠지만
이렇게 패키지 구조로 파이썬 프로그램을 만들게 되면 공동 작업이나 유지 보수 등을 할 때
여러가지 유리한 점들이 생깁니다.
그리고 패키지 구조로 모듈을 만들게 되면 다른 모듈과 이름이 겹치게 되더라도 안전하게 사용이 가능합니다.

패키지 만드는 방법

이제 위의 예와 비슷한 game 패키지를 만들어 보면서 패키지에 대해 더 공부해 보도록 하겠습니다.

패키기 기본 구성 요소

1. 디렉터리 생성과 파일 생성

game 디렉터리를 생성하고 game 디렉터리 밑에 서브 디렉터리까지 생성을 해보겠습니다.
그리고 파이썬 파일들을 만들어 보겠습니다.

저는 기존에 진행하던게 있어서 계속적으로 아래 폴더에 생성을 해보겠습니다.

D:\Dropbox.My_Job.Study.Python
D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game\
.study_python_3.11.0.TEST\game\

game 디렉터리를 생성하고 하위 폴더인 graphic 과 sound 디렉터리도 생성했습니다.
그리고 각각 디렉터리에 비어 있는 __init__.py 파일을 생성해 주었습니다.

BAT
(py_study_3110) D:\Dropbox.My_Job.Study.Python
(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game>dir /s
 D 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: C4C6-D950

 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game 디렉터리

2023-04-28  오후 05:26    <DIR>          .
2023-04-28  오후 03:26    <DIR>          ..
2023-04-28  오후 05:26    <DIR>          graphic
2023-04-28  오후 05:26    <DIR>          sound
2023-04-28  오후 05:26                 0 __init__.py
               1개 파일                   0 바이트

 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game\graphic 디렉터리

2023-04-28  오후 05:26    <DIR>          .
2023-04-28  오후 05:26    <DIR>          ..
2023-04-28  오후 05:26                 0 __init__.py
               1개 파일                   0 바이트

 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game\sound 디렉터리

2023-04-28  오후 05:26    <DIR>          .
2023-04-28  오후 05:26    <DIR>          ..
2023-04-28  오후 05:26                 0 __init__.py
               1개 파일                   0 바이트

     전체 파일:
               3개 파일                   0 바이트
               8개 디렉터리  549,653,786,624 바이트 남음
.study_python_3.11.0.TEST\game
>dir /s
D 드라이브의 볼륨에는 이름이 없습니다. 볼륨 일련 번호: C4C6-D950 D:\Dropbox.My_Job.Study.Python
(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game>dir /s
 D 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: C4C6-D950

 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game 디렉터리

2023-04-28  오후 05:26    <DIR>          .
2023-04-28  오후 03:26    <DIR>          ..
2023-04-28  오후 05:26    <DIR>          graphic
2023-04-28  오후 05:26    <DIR>          sound
2023-04-28  오후 05:26                 0 __init__.py
               1개 파일                   0 바이트

 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game\graphic 디렉터리

2023-04-28  오후 05:26    <DIR>          .
2023-04-28  오후 05:26    <DIR>          ..
2023-04-28  오후 05:26                 0 __init__.py
               1개 파일                   0 바이트

 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game\sound 디렉터리

2023-04-28  오후 05:26    <DIR>          .
2023-04-28  오후 05:26    <DIR>          ..
2023-04-28  오후 05:26                 0 __init__.py
               1개 파일                   0 바이트

     전체 파일:
               3개 파일                   0 바이트
               8개 디렉터리  549,653,786,624 바이트 남음
.study_python_3.11.0.TEST\game 디렉터리
2023-04-28 오후 05:26 <DIR> . 2023-04-28 오후 03:26 <DIR> .. 2023-04-28 오후 05:26 <DIR> graphic 2023-04-28 오후 05:26 <DIR> sound 2023-04-28 오후 05:26 0 __init__.py 1개 파일 0 바이트 D:\Dropbox.My_Job.Study.Python
(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game>dir /s
 D 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: C4C6-D950

 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game 디렉터리

2023-04-28  오후 05:26    <DIR>          .
2023-04-28  오후 03:26    <DIR>          ..
2023-04-28  오후 05:26    <DIR>          graphic
2023-04-28  오후 05:26    <DIR>          sound
2023-04-28  오후 05:26                 0 __init__.py
               1개 파일                   0 바이트

 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game\graphic 디렉터리

2023-04-28  오후 05:26    <DIR>          .
2023-04-28  오후 05:26    <DIR>          ..
2023-04-28  오후 05:26                 0 __init__.py
               1개 파일                   0 바이트

 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game\sound 디렉터리

2023-04-28  오후 05:26    <DIR>          .
2023-04-28  오후 05:26    <DIR>          ..
2023-04-28  오후 05:26                 0 __init__.py
               1개 파일                   0 바이트

     전체 파일:
               3개 파일                   0 바이트
               8개 디렉터리  549,653,786,624 바이트 남음
.study_python_3.11.0.TEST\game\graphic 디렉터리
2023-04-28 오후 05:26 <DIR> . 2023-04-28 오후 05:26 <DIR> .. 2023-04-28 오후 05:26 0 __init__.py 1개 파일 0 바이트 D:\Dropbox.My_Job.Study.Python
(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game>dir /s
 D 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: C4C6-D950

 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game 디렉터리

2023-04-28  오후 05:26    <DIR>          .
2023-04-28  오후 03:26    <DIR>          ..
2023-04-28  오후 05:26    <DIR>          graphic
2023-04-28  오후 05:26    <DIR>          sound
2023-04-28  오후 05:26                 0 __init__.py
               1개 파일                   0 바이트

 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game\graphic 디렉터리

2023-04-28  오후 05:26    <DIR>          .
2023-04-28  오후 05:26    <DIR>          ..
2023-04-28  오후 05:26                 0 __init__.py
               1개 파일                   0 바이트

 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game\sound 디렉터리

2023-04-28  오후 05:26    <DIR>          .
2023-04-28  오후 05:26    <DIR>          ..
2023-04-28  오후 05:26                 0 __init__.py
               1개 파일                   0 바이트

     전체 파일:
               3개 파일                   0 바이트
               8개 디렉터리  549,653,786,624 바이트 남음
.study_python_3.11.0.TEST\game\sound 디렉터리
2023-04-28 오후 05:26 <DIR> . 2023-04-28 오후 05:26 <DIR> .. 2023-04-28 오후 05:26 0 __init__.py 1개 파일 0 바이트 전체 파일: 3개 파일 0 바이트 8개 디렉터리 549,653,786,624 바이트 남음

2. echo.py 파일 생성

아래와 같이 echo.py 파일을 생성해 줍니다.

Python
# echo.py
def echo_test():
    print("echo")

3. render.py 파일 생성

아래와 같이 render.py 파일을 생성해 줍니다.

Python
# render.py
def render_test():
    print("render")

4. 파이썬 환경변수 PYTHONPATH 에 디렉터리 추가하기

지금 진행하고 있는 game 패키지를 파이썬에서 참조할 수 있도록 명령 프롬프트 창에서 set 명령어를 통해 PYTHONAPTH 환경 변수에 현재 디렉토리를 추가해 줍니다.
그리고 파이썬 대화형 인터프리터(Interractive Shell) 을 실행을 해보겠습니다.

BAT
(py_study_3110) D:\Dropbox.My_Job.Study.Python
(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game>set PYTHONPATH=D:/Dropbox/02.My_Job/80.Study/01.Python/00.study_python_3.11.0/01.TEST

(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game>python
Python 3.11.0 | packaged by Anaconda, Inc. | (main, Mar  1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
.study_python_3.11.0.TEST\game
>set PYTHONPATH=D:/Dropbox/02.My_Job/80.Study/01.Python/00.study_python_3.11.0/01.TEST
(py_study_3110) D:\Dropbox.My_Job.Study.Python
(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game>set PYTHONPATH=D:/Dropbox/02.My_Job/80.Study/01.Python/00.study_python_3.11.0/01.TEST

(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\game>python
Python 3.11.0 | packaged by Anaconda, Inc. | (main, Mar  1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
.study_python_3.11.0.TEST\game
>python
Python 3.11.0 | packaged by Anaconda, Inc. | (main, Mar 1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>>

여기까지 파이썬 패키지에 대해서 공부하기 위한 준비 작업을 마쳤습니다.
다음 포스팅에 이어서 패키지에 대한 공부를 이어가 보겠습니다.

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
52. 파이썬 - 패키지의 정의와 만드는 방법

파이썬 아나콘다 프롬프트 가상환경 바로가기

파이썬 아나콘다 프롬프트 가상환경 바로가기

이전에 파이썬을 아나콘다 설치를 통해 가상환경을 설정을 하고 가상환경에서 프로그래밍을 하는 방법에 대해 알아봤었습니다.

파이썬 아나콘다 가상환경

아나콘다 프롬프트 가상환경 바로가기 만들기

파이썬을 이것 저것 만지려 하다 보면
저 같은 경우는 주로 비주얼스튜디오코드에서 코딩 연습을 하지만
명령 프롬프트에서 파이썬을 실행시켜 코딩 연습을 할 때도 있습니다.

그런데 아나콘다를 통해 가상 환경을 셋팅을 하고 코딩 연습을 하는데
일반 윈도우 명령 프롬프트에서 파이썬을 실행시키면
가상 환경을 셋팅한 의미가 없어지겠죠

그래서 아나콘다 자동 실행 Batch 파일을 만드는 것도 진행을 해봤구요

그럼 이번 포스팅에서는 일반 윈도우 명령 프롬프트가 아닌 아나콘다 프롬프트를 실행시켜서
이미 셋팅해 놓은 가상 환경에 바로 전환이 되는 작업을 같이 해보겠습니다.

아나콘다 명령프롬프트 바로 가기 복사

먼저 아나콘다 프롬프트 바로 가기의 위치를 열어 줍니다.
(방법은 위 링크에 해놓은 ‘파이썬 아나콘다 자동 실행 Batch 만들기’에서 확인하실 수 있습니다.)
일단 기존에 있던 바로 가기를 하나 더 복사해서 사용을 하고
이름은 Anaconda Prompt study 로 바꾸겠습니다.

파이썬 아나콘다 프롬프트 가상환경 바로가기

바로가기 속성 기본 대상

생성한 바로 가기에서 마우스 오른쪽 버튼을 클릭해 속성으로 들어가 줍니다.

파이썬 아나콘다 프롬프트 가상환경 바로가기

속성에서 바로 가기 탭으로 이동한 뒤 대상 을 보게 되면

파이썬 아나콘다 프롬프트 가상환경 바로가기

아래처럼 나옵니다.
이 대상은 제 컴퓨터에 해당하는 대상이므로 환경마다 다를 겁니다.

%windir%\System32\cmd.exe "/K" C:\Users\donnr\anaconda3\Scripts\activate.bat C:\Users\donnr\anaconda3

이렇게 나온 대상을 줄 바꿈을 해보겠습니다.

%windir%\System32\cmd.exe
"/K"
C:\Users\donnr\anaconda3\Scripts\activate.bat
C:\Users\donnr\anaconda3

줄 바꿈을 해보면 위처럼 명령들이 나오는데
첫번째 줄의 cmd.exe 는 윈도우에 있는 명령 프롬프트 창을 말합니다.
두번째 줄의 “/K” 는 첫번째 줄에서 실행한 명령 프롬프트 창에
이후에 입력하는 명령어 들을 입력을 하라는 의미입니다.

그럼 먼저 명령 프롬프트를 열고
C:\Users\donnr\anaconda3\Scripts\activate.bat 을 실행해서
윈도우 명령 프롬프트 창을 아나콘다 프롬프트로 바꾸어 주는 역할을 하게 됩니다.
마지막 줄의 anaconda3 는 기본 가상 환경인 base 로 가상 환경을 설정을 해준다는 의미입니다.

바로가기 속성 대상 변경하기

이제 여기서 해줘야 할 일은 기본 base 로 가상 환경이 설정되는 것을
이미 만들어 놓은 가상 환경으로 바꿔주는 일 입니다.
위 대상에 나와있는 명령 중 마지막
C:\Users\donnr\anaconda3
이 부분만 변경해 주면 됩니다.

C:\Users\donnr\anaconda3\envs\설정할 가상 환경 폴더 이름

가상 환경 폴더 이름은 이미 우리가 설정했었던 가상 환경 이름입니다.
저의 경우는 ‘py_study_31010’ 으로 했었습니다.
파이썬 버전까지 같이 이름에 넣어뒀죠 ㅎ
그럼 가상 환경 이름으로 변경을 해주면 아래처럼 됩니다.

C:\Users\donnr\anaconda3\envs\py_study_31010

이제 아까 대상에 있던 명령 마지막 줄을 이 내용으로 바꿔주면 됩니다.

%windir%\System32\cmd.exe
"/K"
C:\Users\donnr\anaconda3\Scripts\activate.bat
C:\Users\donnr\anaconda3\envs\py_study_31010

가상 환경 폴더 바로 가기

여기서 만약 아나콘다 프롬프트 바로 가기를 실행했을때
폴더를 해당 폴더로 이동하기 위해서 cd 명령 치고 하던걸
이 바로가기를 통해서 이동하고 싶다면 아래처럼 하시면 됩니다.

%windir%\System32\cmd.exe
"/K"
C:\Users\donnr\anaconda3\Scripts\activate.bat
C:\Users\donnr\anaconda3\envs\py_study_31010
&& D:
&& cd "D:\Dropbox.My_Job.Study.Python
%windir%\System32\cmd.exe
"/K"
C:\Users\donnr\anaconda3\Scripts\activate.bat
C:\Users\donnr\anaconda3\envs\py_study_31010
&& D:
&& cd "D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0"
.study_python_3.11.0"

위 명령에서 && 을 사용을 하면 && 뒤에 수행하는 명령어를 연속으로 실행시켜 주게 됩니다.
&을 하나만 사용하게 되면 앞에서 오류가 나도 그냥 진행을 해버리고
&& 처럼 두 개를 사용하게 되면 앞에서 오류가 나면 멈추게 됩니다.

최종 대상을 확인해 보겠습니다.
아래처럼 된 상태에서 아까 바로 가기 속성에 있던 대상 옆에 내용을 아래 내용으로 바꿔 주시면 됩니다.

%windir%\System32\cmd.exe "/K" C:\Users\donnr\anaconda3\Scripts\activate.bat C:\Users\donnr\anaconda3\envs\py_study_31010 && D: && cd "D:\Dropbox.My_Job.Study.Python
%windir%\System32\cmd.exe "/K" C:\Users\donnr\anaconda3\Scripts\activate.bat C:\Users\donnr\anaconda3\envs\py_study_31010 && D: && cd "D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0"
.study_python_3.11.0"

최종적으로 기본 제공되는 아나콘다 프롬프트와 변경한 프롬프트 바로 가기를 실행해 봤습니다.

파이썬 아나콘다 프롬프트 가상환경 바로가기

위 실행된 창 처럼 변경한 바로가기는 열자마자 바로 가상 환경으로 변경이 되고
지정 폴더로 이동한 모습을 볼 수 있습니다.

이번 포스팅은 대왕초밥님의 블로그를 참고 했습니다

51. 파이썬 – 모듈을 불러오는 다른 방법

51. 파이썬 – 모듈을 불러오는 다른 방법

지난 포스팅에서 모듈에는 함수뿐만 아니라 클래스나 변수 등을 포함한 모듈도 있다는 것과
다른 파일에서 모듈을 불러오는 방법에 대해 알아봤습니다
이번 포스팅에서는 모듈을 불러오는 다른 방법에 대해 공부해 보도록 하겠습니다.

파이썬 모듈

모듈을 불러오는 다른 방법

여태까지 진행한 파이썬 모듈에서는 모듈이 있는 폴더에 이동 후에 해당 모듈을 사용을 할 수 있었습니다.
이제 모듈이 저장되어있는 폴더로 이동하지 않고 해당 모듈을 불러서 사용하는 방법도 공부해 보도록 하겠습니다.

먼저 이전 포스팅에서 만들었던 module2.py 파일을 기존 폴더에서 module 이라는 폴더를 하나 더 만들고 해당 폴더로 이동시켜 보겠습니다.

Python
(py_study_3110) D:\Dropbox.My_Job.Study.Python
(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>mkdir module

(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>move module2.py module
        1개 파일을 이동했습니다.
.study_python_3.11.0.TEST>mkdir module
(py_study_3110) D:\Dropbox.My_Job.Study.Python
(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>mkdir module

(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>move module2.py module
        1개 파일을 이동했습니다.
.study_python_3.11.0.TEST>move module2.py module
1개 파일을 이동했습니다.

sys.path.append 사용하기

모듈을 불러오는 다른 방법 첫번째는 sys.path.append 를 사용하는 방법입니다.
일단 파이썬 쉘을 실행한 뒤 sys 모듈을 불러오겠습니다.

Python
(py_study_3110) D:\Dropbox.My_Job.Study.Python
(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python
Python 3.11.0 | packaged by Anaconda, Inc. | (main, Mar  1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>>
.study_python_3.11.0.TEST>python
Python 3.11.0 | packaged by Anaconda, Inc. | (main, Mar 1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>>

위에서 import 한 sys 모듈은 파이썬이 최초 설치될 때 함께 설치되는 라이브러리 모듈입니다.
sys 모듈을 사용을 하게 되면 파이썬 라이브러리가 설치되어 있는 폴더를 확인할 수 있습니다.

Python
>>> sys.path
['', 'C:\\Users\\BSH-MSI\\anaconda3\\envs\\py_study_3110\\python311.zip', 'C:\\Users\\BSH-MSI\\anaconda3\\envs\\py_study_3110\\Lib', 'C:\\Users\\BSH-MSI\\anaconda3\\envs\\py_study_3110\\DLLs', 'C:\\Users\\BSH-MSI\\anaconda3\\envs\\py_study_3110', 'C:\\Users\\BSH-MSI\\anaconda3\\envs\\py_study_3110\\Lib\\site-packages']
>>>

sys.path 를 실행시키게 되면 파이썬 라이브러리가 설치 되어 있는 폴더들을 출력 해 줍니다.
만약에 파이썬 모듈이 위에 출력된 폴더에 있다면 모듈이 저장된 폴더로 이동을 하지 않고도 바로 해당 모듈을 불러서 사용을 할 수가 있을 것입니다.
그럼 sys.path 에 이전에 mkdir 로 생성했던 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\module 라는 폴더를 추가해 주게 된다면 어느 폴더에서든지 해당 모듈을 불러와서 사용할 수 있지 않을까요?

위에서 보여지는 것처럼 sys.path 는 리스트 형식으로 저장되어 있는걸 알 수 있고
리스트는 수정이 가능합니다.

Python
>>> sys.path.append("D:/Dropbox/02.My_Job/80.Study/01.Python/00.study_python_3.11.0/01.TEST/module")
>>> sys.path
['', 'C:\\Users\\BSH-MSI\\anaconda3\\envs\\py_study_3110\\python311.zip', 'C:\\Users\\BSH-MSI\\anaconda3\\envs\\py_study_3110\\Lib', 'C:\\Users\\BSH-MSI\\anaconda3\\envs\\py_study_3110\\DLLs', 'C:\\Users\\BSH-MSI\\anaconda3\\envs\\py_study_3110', 'C:\\Users\\BSH-MSI\\anaconda3\\envs\\py_study_3110\\Lib\\site-packages', 'D:/Dropbox/02.My_Job/80.Study/01.Python/00.study_python_3.11.0/01.TEST/module']
>>>

sys.path.append 라고 명령을 해서 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\module 라는 폴더를 path 에 추가를 해주었습니다.
sys.path 라고 실행해 보면 방금 추가한 폴더가 추가되었음을 확인 할 수 있습니다.
여기서 주의할 점은 그냥 경로를 붙여넣기 해버리면 \\ 로 들어가는데 / 로 변경해서 append 를 해주시면 위처럼 D:/Dropbox/02.My_Job/80.Study/01.Python/00.study_python_3.11.0/01.TEST/module 이렇게 경로가 추가됨을 알 수 있습니다.

이제 정말 모듈을 불러와서 사용할 수 있는지 확인 해 보겠습니다.

Python
>>> import module2
>>> print(module2.add(3, 4))
7
>>>

위처럼 정상적으로 모듈을 불러와서 사용할 수 있는게 확인이 되었습니다.

PYTHONPATH 환경 변수 사용하기

모듈을 다른 방법으로 불러오는 또 하나의 방법은 PYTHONPATH 환경 변수를 사용하는 방법이 있습니다.

Python
(py_study_3110) D:\Dropbox.My_Job.Study.Python
(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>set PYTHONPATH=D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\module

(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python
Python 3.11.0 | packaged by Anaconda, Inc. | (main, Mar  1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import module2
>>> print(module2.add(3, 4))
7
>>>
.study_python_3.11.0.TEST>set PYTHONPATH=D:\Dropbox.My_Job.Study.Python
(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>set PYTHONPATH=D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\module

(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python
Python 3.11.0 | packaged by Anaconda, Inc. | (main, Mar  1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import module2
>>> print(module2.add(3, 4))
7
>>>
.study_python_3.11.0.TEST\module
(py_study_3110) D:\Dropbox.My_Job.Study.Python
(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>set PYTHONPATH=D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\module

(py_study_3110) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python
Python 3.11.0 | packaged by Anaconda, Inc. | (main, Mar  1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import module2
>>> print(module2.add(3, 4))
7
>>>
.study_python_3.11.0.TEST>python
Python 3.11.0 | packaged by Anaconda, Inc. | (main, Mar 1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import module2 >>> print(module2.add(3, 4)) 7 >>>

위에서 처럼 set 명령어를 사용해서 PYTHONPATH 환경 변수에 module2.py 파일이 존재하는 D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\module 폴더를 설정해 주었습니다.
이렇게 해주면 폴더 이동이나 다른 모듈 추가 작업이 없이도 module2 모듈을 불러와서 사용할 수 있게 됩니다.

맥이나 유닉스 환경에서는 set 명령 대신 export 명령을 사용해야 합니다.

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
모듈을 불러오는 다른 방법