65. 파이썬 내장 함수 max min oct open ord pow range

65. 파이썬 내장 함수 max min oct open ord pow range

지난 포스팅에서 파이썬 내장 함수 len list map 에 대해서 공부해 봤습니다.
이번 포스팅에서는 파이썬의 내장 함수 max min oct open ord pow range 에 대해 공부해 보도록 하겠습니다.

파이썬 내장 함수

max

내장 함수 max 는 반복 가능한 데이터(iterable) 를 인수로 입력을 받아 그 중 최대값을 리턴을 해주는 함수 입니다.

Python
>>> max([2, 4, 6])
6
>>> max("python")
'y'
>>>

min

min 함수는 max 함수와는 반대로 최소값을 리턴을 해주는 함수입니다.
마찬가지로 반복 가능한 데이터를 인수로 입력을 받습니다.

Python
>>> min([2, 4, 6])
2
>>> min("python")
'h'
>>>

oct

oct 함수는 이전에 공부했던 hex 와 비슷합니다.
hex 는 16진수 문자열을 리턴을 한다면 oct 는 8진수 문자열로 변경해서 리턴을 하게 됩니다.

Python
>>> oct(34)
'0o42'
>>> oct(12345)
'0o30071'
>>>

open

open 내장 함수는 open(filename, [mode])의 형태로 이루어 지며 ‘파일 이름’과 ‘읽기 방법’ 을 입력 받아서 파일 객체를 리턴을 하는 함수 입니다.
읽기 방법(mode)은 생략이 가능하며, 생략을 할 경우에는 기본값인 읽기 모드(r)로 파일 객체를 만들어서 리턴을 하게 됩니다.

open 내장 함수의 mode

w : 쓰기 모드로 파일 열기
r : 읽기 모드로 파일 열기
a : 추가 모드로 파일 열기
b : 바이너리 모드로 파일 열기

이처럼 네 가지 모드 중에서 b 모드는 w, r, a 모드와 함께 사용이 됩니다.

Python
>>> f = open("binary_file", "rb")

위 코드에서 rb 는 ‘바이너리 읽기 모드’ 를 의미합니다.

ord

ord 내장 함수는 입력 받은 문자의 유니코드 숫자 값을 리턴을 해 주는 함수 입니다.
ord 함수는 이전에 공부했던 chr 함수와 반대라고 보시면 됩니다.

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

pow

pow 내장 함수는 두 개의 입력값 x, y 를 받아서 x 의 y 제곱을 한 결과값을 리턴을 해 주는 함수 입니다.

Python
>>> pow(2, 4)
16
>>> pow(3, 3)
27
>>>

range

range 내장 함수는 for 문과 함께 자주 사용되는 함수 입니다.
range([start,] stop[,step]) 형식으로 입력을 받게 되며 입력 받은 숫자에 해당하는 범위 값을 반복 가능한 객체로 만들어서 리턴을 하게 됩니다.

인수가 하나일 경우

start 에 해당하는 시작 숫자를 지정해 주지 않을 경우 range 함수는 0 부터 시작을 하게 됩니다.

Python
>>> list(range(5))
[0, 1, 2, 3, 4]
>>>

인수가 2 개일 경우

입력으로 2 개의 인수를 주어질 경우 2 개의 인수는 시작 숫자와 끝 숫자를 나타내게 됩니다.
끝 숫자는 해당 범위에 포함이 되지 않습니다.

Python
>>> list(range(5, 10))
[5, 6, 7, 8, 9]
>>>

인수가 3 개일 경우

인수가 3 개일 경우는 위의 2 개일 경우에 step 즉, 숫자 사이의 간격을 말합니다.

Python
>>> list(range(1, 10, 2))
[1, 3, 5, 7, 9]
>>> list(range(0, -10, -1))
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>>

위 코드를 보시면 range(1, 10, 2) 에서 1 이 시작 숫자, 10 이 끝 숫자, 2 가 step 을 의미합니다.
1 에서 10 까지 10 을 포함하지 않는 범위에서 1 다음 2 간격을 주고 3, 다시 2 간격을 주고 5 이런식으로 리스트를 만들어 리턴을 해주었습니다.

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
65. 파이썬 내장 함수 max min oct open ord pow range

64. 파이썬 내장 함수 len list map

64. 파이썬 내장 함수 len list map

지난 시간에 파이썬 내장 함수 hex id input int 함수에 대해 공부해 봤습니다.
이번 포스팅에서는 파이썬 내장 함수 len list map 에 대해 공부 해보도록 하겠습니다.

파이썬 내장 함수

len

파이썬 내장 함수 len 은 입력값의 길이나 즉 요소의 전체 개수를 리턴을 해주는 함수 입니다.

Python
>>> len("python")
6
>>> len([2, 4, 6])
3
>>> len((1, 'a'))
2
>>>

위 예제 처럼 문자열의 경우는 문자열의 길이를 다른 리스트나 튜플 등의 경우에는 전체 개수를 리턴을 해주게 됩니다.

list

list 내장 함수는 반복 가능한 데이터(iterable) 를 입력을 받아서 리스트로 만들어 리턴 해 주는 함수입니다.

Python
>>> list("python")
['p', 'y', 't', 'h', 'o', 'n']
>>> list((1, 2, 3))
[1, 2, 3]
>>>

list 함수에 리스트를 입력하면 어떻게 될까요?

Python
>>> a = [2, 4, 6]
>>> b = list(a)
>>> b
[2, 4, 6]
>>>

list 함수에 리스트를 입력하게 되면 똑같은 리스트를 복사해서 리턴을 하게 됩니다.

map

내장 함수 map 은 map(f, iterable) 형식으로 입력을 받습니다.
f 와 반복 가능한(iterable) 데이터를 입력으로 받는 것입니다.
이렇게 입력 받은 데이터의 각 요소들에 함수 f 를 적용한 결과를 리턴을 해주는 함수입니다.

Python
# two_times.py
def two_times(numberList):
    result = []
    for number in numberList:
        result.append(number * 2)
    return result

result = two_times([1, 2, 3, 4])
print(result)

위 코드는 two_times 라는 함수를 생성을 하는데 리스트를 입력을 받아서 각 요소에 2 를 곱해 리턴을 해주는 함수입니다.
실행을 해보면 아래와 같이 결과를 리턴을 하게 됩니다.

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 two_times.py
[2, 4, 6, 8]
.study_python_3.11.0.TEST>python two_times.py
[2, 4, 6, 8]

위 코드를 map 함수를 이용해 변경을 해보겠습니다.

Python
>>> def two_times(x):
...     return x * 2
...
>>> list(map(two_times, [1, 2, 3, 4]))
[2, 4, 6, 8]
>>>

위 코드를 살펴보겠습니다.
먼저 리스트의 첫 번째 요소인 1 이 two_times 함수의 입력 값으로 들어가게 되고 1 * 2 의 과정을 걸쳐 2 가 됩니다. 그 다음은 두 번째 요소인 2 가 two_times 함수의 입력 값으로 들어가 2 * 2 의 과정을 걸쳐 4 가 됩니다. 지금 까지의 결과값은 [2, 4] 가 되었습니다.
이런 식으로 마지막까지 진행을 하게 되면 [2, 4, 6, 8] 의 리스트가 리턴이 되게 됩니다.
이렇게 map 함수는 반복되는 값을 입력 받아 정의된 함수에 입력을 해 최종 결과를 리턴을 하게 해줍니다.

위 코드에서는 map 함수의 결과를 리스트로 출력해 주기 위해 list 함수를 사용했습니다.
map 함수의 경우는 map 객체를 리턴을 하게 됩니다.

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

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

61. 파이썬 내장 함수 – dir divmod

61. 파이썬 내장 함수 – dir divmod

지난 포스팅에 파이썬 내장 함수 abs, all, any, chr 등의 내장 함수에 대해 공부해 봤습니다.
이번 포스팅에서는 dir divmod 이라는 내장 함수에 대해 공부해 보도록 하겠습니다.

파이썬 내장 함수

dir

dir 내장 함수는 파이썬의 객체가 가지고 있는 변수 또는 함수를 보여 주는 내장 함수 입니다.
아래 예제는 리스트와 딕셔너리가 지닌 함수 즉, 메서드를 보여주는 코드 입니다.
이전에 공부했었던 함수 들을 다시 한 번 볼 수가 있습니다.

Python
(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0>python
Python 3.10.10 | packaged by Anaconda, Inc. | (main, Mar 21 2023, 18:39:17) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> dir([1, 2, 3])
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
>>> dir({'1':'a'})
['__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__ior__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__ror__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
>>>

divmod

divmod 내장 함수는 2개의 숫자를 입력을 받습니다.
a, b 를 입력받아 a 를 b 로 나눈 몫과 나머지를 튜플로 리턴을 해줍니다.

Python
>>> divmod(5,3)
(1, 2)
>>>

이전에 공부했던 몫을 구하는 연산자 // 와 나머지를 구하는 연산자 % 를 각각 사용한 결과를 하나의 튜플로 보여주게 됩니다.

Python
>>> 5 // 3
1
>>> 5 % 3
2
>>>

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

61. 파이썬 내장 함수 - dir divmod

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\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

이번에는 예외 처리 기법을 사용해서 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\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python test.py
천사
이 별명은 허용되지 않은 별명입니다.

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

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

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

Python
(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.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\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.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\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: 

파이썬에서 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 예외 처리 상황과 대처 방법