TigerCow.Door


안녕하세요. 문범우입니다.

오늘은 파이썬에서 예외처리를 하는 방법에 대해서 알아보도록 하겠습니다.


1. 예외 처리(Exception)


우리가 파이썬을 통해(또는 다른 프로그래밍 언어를 통해) 프로그램을 제작할 때 수없이 많은 오류가 발생할 수 있습니다.

물론 그러한 오류를 발생시키지 않도록 하는 것이 좋을 수 있으나 때로는 특정 오류를 그냥 무시하게끔 하는 것이 필요할 때도 있습니다.

이러한 것을 하기 위해 파이썬에서는 예외(오류)처리를 할 수 있도록 try, except문을 이용합니다.



2. 오류는 언제 발생할까?


우리가 직접적으로 오류를 처리해보기 전에 어떠한 오류들이 어떻게 발생하는지 몇가지만 간단히 알아보겠습니다.


먼저, 우리가 해당 경로에 존재하지 않는 파일을 열려고 했을 때 발생하는 오류입니다.



위의 코드에서 오류난 것을 살펴보면 FileNotFoundError 라는 것을 반환해주고 있습니다.



두번째는 숫자를 0으로 나눴을 때 발생하는 오류입니다.



위의 코드에서는 ZeroDivisionError를 반환해줍니다.



마지막으로는 리스트의 인덱스 범위를 벗어났을때 오류입니다.



위의 코드를 보면, list는 0번째, 1번째, 2번째 요소값만 가지고 있었는데 3번째 값을 요청하니 IndexError를 반환합니다.



3. 오류 예외 처리 하기


그럼 위에서 간단히 알아본 오류들을 어떻게 처리하는지 살펴보겠습니다.

처음에 간단히 언급하였듯이 파이썬에서는 예외처리를 위해 try, except 문을 이용합니다.

먼저 해당 try, except 문에 대한 기본적인 구조는 아래와 같습니다.


try:

<실행할 문장1>

<실행할 문장2>

<실행할 문장3>

...

except [발생오류[as 오류 메세지 변수]]:

<오류를 무시하고 실행할 문장1>

<오류를 무시하고 실행할 문장2>

<오류를 무시하고 실행할 문장3>

...


위의 구조를 살펴보면, 먼저 try 이하에서 특정 코드(들)를 실행합니다.

그리고 우리가 except에서 걸어준 발생오류가 발생하면 프로그램을 정지시키지 않고 except 이하의 코드를 실행합니다.

여기서 except 문 오른쪽에 대괄호( [, ] )로 묶인 이유는 생략이 가능하기 때문입니다.

즉, 특정한 오류에 대해 그 오류명을 지정하여 그에 대해서만 예외처리가 가능하며 어찌되었든 오류가 발생했을때의 상황에 대한 예외처리도 가능합니다.

또한 as를 사용함으로써 오류메세지의 내용까지 확인할 수 있습니다.


간단하게 0으로 나누는 코드에서 오류메세지의 내용을 출력해보는 코드는 아래와 같습니다.



또한 추가적으로 try문은 else절을 지원합니다. 

else 절은 예외가 발생하지 않은 경우에만 실행이 되며 except 절 바로 다음에 위치해야 합니다.



즉 위의 코드는 test.txt 라는 파일이 있을때는 그 내용을 읽어서 data라는 변수에 저장하지만, 파일이 존재하지 않을때는 오류메세지를 출력합니다.


또한 try문에서는 finally절을 지원합니다.

finally절은 else절과 다르게, 오류 발생여부에 상관없이 항상 수행됩니다. 



4. 오류 회피하기



오류를 회피하는 방법으로는 위 코드와 같이 try, except 문을 이용하여 오류를 잡아주고 except절 이하에서 단순히 pass 처리를 하면됩니다.



5. 오류 발생시키기


지금까지는 오류를 어떻게 처리하는지, 회피하는지 알아보았는데 프로그래밍을 하다보면 일부러 오류를 발생시켜야 하는 경우도 있습니다. 이럴때는 raise 라는 명령어를 통해서 오류를 발생시키면 됩니다.



위의 코드 처럼 raise 뒤에 적절한 오류명을 적어줌으로써 오류를 발생시킬 수 있습니다.

추가적으로 해당 오류명뒤에 괄호를 통해 오류내용을 함께 포함시킬 수 있습니다.

이때, 정의되어있지 않은 오류명은 NameError 라는 다른 오류를 발생시킵니다.



이렇게 해서 파이썬에서 오류(예외)를 처리하는 방법에 대해서 알아보았습니다.

잘 해결되지 않거나 추가적인 궁금사항은 댓글을 이용해주세요 :)

블로그 이미지

Tigercow.Door

Web Programming / Back-end / Database / AI / Algorithm / DeepLearning / etc

댓글을 달아 주세요


안녕하세요. 문범우입니다.

이번 포스팅에서는 파이썬에서 클래스의 상속(Inheritance)에 대해서 알아보도록 하겠습니다.


1. 상속(Inheritance)


상속(Inheritance)이란, 다들 아시다시피 '물려받다'라는 의미를 가지고 있습니다.

클래스의 상속은 이러한 의미가 적용됩니다.

즉, B라는 클래스를 만들때 이미 만들어져 있던 A라는 클래스의 기능을 물려받는 것 입니다.

보다 쉽게 이해하기 위해 아래와 같은 Univ 클래스를 구성하였습니다.



Univ class에서는 기본적으로 University를 '서울시립대학교'로 지정하고, __init__함수에서 학년을 설정하게됩니다.

그리고 hello()함수를 통해 자신의 학교, 학년, 이름을 말하게 됩니다.


이제 상속을 사용해보도록 합니다.

ECE라는 클래스를 만드는데 Univ에게 상속을 받으며 University를 '서울시립대학교 전자전기컴퓨터공학부'로 바꾸겠습니다.



위의 코드와 같이 ECE 클래스를 구성하여 해당 파일을 실행시키면 아래와 같은 결과가 나옵니다.



ECE 클래스에서는 hello() 함수를 따로 선언하지 않았지만, Univ 클래스에게 상속받음으로써 이를 사용할 수 있는 것입니다.


위와 같이 상속은 아래와 같은 구조를 가지게 됩니다.


class 상속받을 클래스명(상속할 클래스명):

<내용 1>

<내용 2>

...



2. 매서드 오버라이딩(Method overriding)


상속에 개념중에서 알아야할 또 다른 개념은 매서드 오버라이딩(Method overriding)입니다.

이는 상속받은 함수를 새롭게 구현하는 것입니다.

예를 들어, 위의 ECE 클래스에서 다른 방식으로 인사를 해야한다면 아래와 같이 매서드 오버라이딩을 하면 됩니다.



위의 코드에서 11,12번 라인을 보면 hello()함수를 새롭게 구현한 것을 보실 수 있습니다.

이러한 것이 매서드 오버라이딩입니다.



3. 연산자 오버로딩(overloading)


연산자 오버로딩이란 연산자(+, -, *, /, ... )를 객체끼리 사용할 수 있게 하도록 하는 것입니다.

즉 연산자를 새롭게 구현하는 것입니다.

연산자 오버로딩을 통해 다음과 같은 것을 구현할 수 있습니다.



코드에서 13,14라인을 보시면 __add__라는 함수를 구현한 것을 볼 수 있습니다.

위와 같은 것이 연산자 오버로딩입니다.


이렇게 해서 파이썬에서 클래스에 대한 개념에 대해 두번의 포스팅으로 알아보았습니다.

다음 포스팅에서는 '모듈'에 대해서 알아보겠습니다.



블로그 이미지

Tigercow.Door

Web Programming / Back-end / Database / AI / Algorithm / DeepLearning / etc

댓글을 달아 주세요


안녕하세요. 문범우입니다.

이번에는 파이썬에서 집합 자료형에 대한 이야기를 하겠습니다.

해당 포스팅으로 자료형에 대한 이야기가 마무리 될 예정이며 이후에는 조금 더 빠르게 진도를 나가려 합니다. :)

그 동안 쉬엄쉬엄 조금씩 했더니 너무 느리게 진행되고 있다는걸 최근에서야 깨달은 것 같아서요.

빠르게 기본 개념을 학습하고, 예제를 풀며 심화학습하는 방식으로 진행하겠습니다.



1. 집합 자료형


집합 자료형과 리스트를 혼동하시는 분들도 있는데, 분명히 다른 자료형입니다.

집합 자료형을 통해서 우리는 집합에 관련된 것들을 쉽게 처리할 수 있습니다.

일단 집합 자료형을 만들어 보도록 하겠습니다.

집합 자료형은 아래 사진처럼 set키워드를 통해 만들 수 있습니다.



위의 사진과 같이 set() 의 괄호안에 리스트 또는 문자열을 입력하여 집합 자료형을 만듭니다.



2. 집합 자료형의 특징


그런데, 위의 사진에서 s2라는 집합에 대해 이상한 점을 보셨나요?

우리는 분명, "Hello, world!" 라는 문장을 입력했는데 빠진 글자가 있기도 하고 순서도 엉망이 되었습니다.

이는, 집합 자료형이 가진 아래와 같은 2개의 특징이 있기 때문입니다.


- 중복을 허용하지 않는다.

- 순서가 없다.(Unordered)


우리가 앞에서 학습했던 리스트나 튜플은 순서가 있기 때문에 인덱싱의 개념도 학습하고 이를 통해 자료형의 값을 얻어낼 수도 있었습니다. 하지만 집합 자료형, set 자료형은 순서가 없기 때문에 인덱싱이 존재하지 않습니다. 물론 바로 앞에서 학습했던 딕셔너리 자료형 또한 순서가 없기 때문에 인덱싱이 존재하지 않습니다.

만약, 집합 자료형으로 만든 값에 대해서 인덱싱을 처리하고 싶다면 list() 함수를 통해 집합 자료형을 리스트 자료형, 또는 tuple() 함수를 통해 튜플 자료형으로 변환해주셔야 합니다.



3. 집합 자료형 활용하기


집합 자료형에서는 교집합이나 합집합, 차집합등을 구할 수 있습니다.

각각에 대한 개념은 기초적인 개념이라 생각하고 설명은 생략하겠습니다.


먼저 교집합을 구하기 위한 기호는 '&' 입니다.



또한 아래의 사진 처럼 intersection() 함수를 사용해도 가능합니다.




두번째, 합집합은 '|' 기호를 통해 구할 수 있습니다.

또한, union() 함수를 사용해도 됩니다.




세번째, 차집합은 '-' 기호를 통해 구합니다. 이는 difference() 함수를 사용해도 됩니다.




4. 집합 자료형 관련 함수


집합 자료형과 관련된 함수들 중에서 몇가지만 소개해드리겠습니다.

먼저 하나의 값을 추가하는 add() 함수입니다.



그리고 한번에 여러개의 값을 추가하는 update() 함수입니다.




마지막으로 특정 값을 제거하는 remove() 함수입니다.



이렇게 해서 집합 자료형에 대해 살펴보았습니다.

다음 포스팅에서는 제어문에 대한 이야기를 해보도록 하겠습니다.

블로그 이미지

Tigercow.Door

Web Programming / Back-end / Database / AI / Algorithm / DeepLearning / etc

댓글을 달아 주세요


안녕하세요.

이번 포스팅에서는 튜플 자료형에 대해서 알아보도록 하겠습니다.


1. 튜플 자료형


지난 포스팅에서 리스트 자료형에 대해서 알아보았습니다. 리스트 자료형은 특정 숫자 또는 문자들이 대괄호('[',']')로 묶인 형태인데요, 튜플 자료형은 이와 다르게 소괄호('(',')')로 묶인 것입니다.

튜플은 어떻게 만들까요?

일단, 튜플은 리스트와 거의 비슷하지만 위에서 언급했던 점과 같이 약간의 차이점만 존재합니다.


- 리스트는 대괄호, 튜플은 소괄호로 둘러쌓인다.

- 리스트는 내부 요소의 생성, 삭제 및 수정이 가능하지만 튜플은 불가능하다.


이러한 튜플은 다음과 같은 모습을 가집니다.



위의 그림에서 세번째 항목과 같이, 튜플에서는 한가지 요소만 가질때에는 하나의 요소 뒤에 콤마(,)를 반드시 붙여줘야합니다.

또한 네번째 항목과 같이 괄호를 생략한 것은 자동으로 튜플로 생성됩니다.


이러한 튜플과 리스트에 있어서 가장 큰 차이점으로는, 위에서 언급하였듯이 요소의 값을 변화시킬 수 있는가 없는가입니다.



2. 튜플 요소 값 삭제 및 변경 오류


튜플 요소 값을 삭제하려 하면 아래와 같은 오류가 발생합니다.



마찬가지로, 튜플 요소 값을 수정하려 하면 아래와 같은 오류가 발생합니다.




3. 튜플 활용하기


리스트 자료형에서 활용했던 인덱싱, 슬라이싱, 더하기, 곱하기가 튜플에서도 가능합니다.


먼저 인덱싱과 슬라이싱입니다.




그리고 튜플 더하기와 곱하기 입니다.




이렇게 해서 튜플 자료형에 대해서도 알아보았습니다.

튜플 자료형은 기본적인 차이점을 제외하고 리스트와 매우 비슷하니 함께 공부해주세요.

다음 포스팅에서는 딕셔너리 자료형에 대해서 알아보겠습니다.

블로그 이미지

Tigercow.Door

Web Programming / Back-end / Database / AI / Algorithm / DeepLearning / etc

댓글을 달아 주세요


안녕하세요. 오랜만에 파이썬 포스팅입니다.

이번에는 리스트 자료형에 대해서 알아보도록 하겠습니다.

이후 튜플이라는 자료형에 대해서도 알아볼텐데, 리스트와 혼동이 있을 수 있으니 확실히 이해하고 연습하고 넘어가세요.


1. 리스트 자료형


우리는 지난 포스팅들에서 숫자와 문자열에 대해서 알아보았습니다.

하지만 이러한 것들로 프로그래밍을 진행하기엔 아직 부족합니다. 예를 들어 특정 숫자들의 집합이라는 개념을 표현하는 것은 쉽지 않습니다.

파이썬에서는 이러한 것을 적절히 표현하기 위해 리스트라는 자료형이 있습니다.


먼저, 리스트 자료형은 아래와 같은 구조를 가지게 됩니다.


리스트명 = [요소1, 요소2, 요소3, ... ]


이러한 구조를 통해 아래와 같은 리스트들을 만들 수 있습니다.



위의 예시들중, list1과 같이 비어있는 리스트도 존재할 수 있으며, 특히 파이썬에서는 리스트 내부 요소들간의 자료형이 서로 상이할 수 있습니다. 또한 리스트 내부에 리스트 자료형 또한 가질 수 있죠.

즉, 리스트 내부의 요소는 어떠한 자료형이든 가능합니다.



2. 리스트의 인덱싱과 슬라이싱


문자열에 대해서 학습할때 했던 인덱싱과 슬라이싱이 기억나시나요?

리스트 자료형에서 또한 인덱싱과 슬라이싱이 가능합니다.


먼저, 인덱싱에 대해서 알아보겠습니다.

아래와 같은 리스트가 존재합니다.



여기서, list_indexing[0]은 list_indexing이라는 리스트에서 0번째 요소(첫번째 요소)를 말합니다.

그렇다면, list_indexing에서 2번째요소와 3번째 요소의 합은 어떻게 구할까요?

바로 아래와 같습니다.



문자열과 같이 맨 앞에 있는 요소가 1번째가 아닌, 0번째인 것을 유의하시길 바랍니다.

또한, 문자열과 같이 list_indexing[-1]은 해당 리스트의 맨 마지막 요소를 가리킵니다.


그렇다면 한번 더 해보도록 하겠습니다.

list_indexing[4]는 무엇을 출력할까요?



list_indexing에서 4번째요소는 ["Hello","List indexing"]이라는 리스트 자료형인 요소입니다.

즉, list_indexing[4] = ["Hello","List indexing"] 인 것입니다.

그럼, list_indexing을 통해 "Hello"라는 문자열을 어떻게 가져올까요? 바로 아래와 같습니다.



그렇다면, 리스트 슬라이싱은 어떻게 하는 것일까요?

이 또한 문자열 슬라이싱과 매우 유사합니다.

아래와 같은 리스트가 존재합니다.



리스트 슬라이싱 또한 문자열 슬라이싱에서 학습했던 것을 기억하시면 됩니다.



3. 리스트 연산자


문자열 연산에 대해서, + 기호를 이용해 문자열 두개를 더하고, * 기호를 이용해서 반복했던 것 기억하시나요?

리스트 역시 문자열과 같이 그러한 연산이 가능합니다.


먼저 리스트 더하기를 살펴보겠습니다.



위의 그림 처럼, 문자열에서 + 기호가 했던 역할과 같이 리스트에서도 두개의 리스트를 서로 합쳐집니다.



그렇다면, * 기호를 이용한 리스트 반복하기도 살펴보겠습니다.



* 기호 또한, 위의 그림처럼 리스트를 반복하여 새로운 리스트를 만들어냅니다.



4. 리스트 요소 수정하기


그렇다면 리스트 내부에 있는 요소들은 어떻게 수정할까요?

먼저 리스트 내부의 요소 중 하나의 요소에 대해서는 아래와 같이 수정할 수 있습니다.



위의 그림처럼 리스트에서 하나의 요소를 선택하고, 수정하고 하는 값으로 입력하면 됩니다.


그럼 리스트에서 연속된 범위의 값에 대한 수정은 어떻게 할까요?

즉, 하나의 요소를 수정하는 것이 아닌 한번에 여러개의 요소에 대해 수정하는 것입니다.

위에서 했던 것처럼, 수정하고자 하는 요소들을 선택하고 변경될 값을 입력하면 되겠죠?



위의 그림처럼, 변경하고자 하는 요소들의 범위를 입력합니다. (list[3:6])

그리고 이들을 어떤 값으로 수정할지 입력하면 됩니다.


여기서 재밌는 점은, 변경하고자 하는 요소들의 개수와 수정될 값의 개수가 꼭 1:1이 아니어도 된다는 것입니다.

무슨 말인지 아리송하시다면 아래 예시를 확인하시죠.



위의 그림에서 선택된 요소의 범위는, list[1:3]으로써 list[1]과 list[2]의 요소를 선택하였습니다.

그리고 100,200,300,400,500 이라는 5개의 요소로 변경하였습니다.

즉 2개의 요소가 5개의 요소로 변경된 것입니다.


그럼 아래 그림의 차이점에 대해서 한번 고민해볼까요?



동일한 리스트, list1과 list2를 만들고 각각에 비슷해 보이는 명령을 내렸습니다.

하지만 이후 list1과 list2를 보면 서로의 결과가 동일하지 않고, list1의 변경된 요소들에 괄호가 되어있습니다.

결과적으로, 이렇게 바뀐 list1과 list2는 서로 전혀 다른 결과값입니다.


먼저 list1[1] = 10,20,30으로 수정하는 것은 list1에서 list1[1]요소 자체를 (10,20,30)으로 바꾸는 것입니다.

괄호로 묶인 자료형은 튜플이라고 하는 것인데 파이썬에서는 특정 자료형들을 괄호 없이 나열하게 되면 자동적으로 튜플로써 인식하여 소괄호가 생기게됩니다. 자세한 것은 추후 튜플에 관해 알아볼 때 살펴보겠습니다.


그리고 list2[1:2] = 10,20,30으로 수정하는 것은 위와는 좀 다르게, list2에서 list2[1]에서 list[2]사이의 리스트를 10,20,30으로 수정하는 것을 의미합니다.


이러한 수정과정에 있어서 실수가 없도록 주의하시길 바랍니다.



5. 리스트 요소 삭제하기


리스트 요소를 삭제하는 방법으로는 크게 두가지가 존재합니다.

[]를 이용하는 방법, 그리고 함수를 이용하는 방법.

먼저 대괄호([])를 이용하는 방법에 대해서 살펴보겠습니다.



위의 그림처럼 리스트에서 삭제하고자 하는 요소들의 범위를 입력하여 이를 빈 리스트([])로 대체하는 방법입니다.

여기서도 단순히 리스트의 요소를 선택하면 안되고 범위로써 선택해야 합니다.


두번째는 함수를 이용하는 방법입니다.

리스트에서 요소를 삭제하는 del 이라는 함수가 존재합니다.

아래 그림을 통해 어떻게 사용하는지 살펴보겠습니다.



del (삭제하고자 하는 리스트의 요소 = 객체) 이런식으로 사용하면 됩니다.




이렇게 해서 리스트 자료형에 대해서 알아보았습니다.

다음 포스팅에서는 리스트 자료형에서 사용하는 함수들에 대해서 알아보도록 하겠습니다.


블로그 이미지

Tigercow.Door

Web Programming / Back-end / Database / AI / Algorithm / DeepLearning / etc

댓글을 달아 주세요