파이썬 예외 처리



try, finally


프로그램 수행 중 예외가 발생을 하던 발생하지 않던 사용했던 리소스는 무조건 반납을 해야 합니다.

반납을 하지 않으면 메모리 leak이 발생해 언젠가 컴퓨터에서 이상동작을 일으키기 때문이죠.

이번에는 프로그램 종료 전에 예외 발생 여부와 상관없이 실행되는 구문인 finally에 대해 알아보도록 하겠습니다.


우선 아래 예제를 보자

실행 해보면 '파일 종료' 문구가 출력되지 않는 것을 알 수 있다.


#!/usr/bin/python

# -*- coding: utf-8 -*-


try:

    f = open('C:\\newfile.txt','r')

    retval = 10/0

    print('파일 종료1')

    f.close()

    print('파일 종료2')

except ZeroDivisionError as e :

    print(e)



이와같이 파일 종료를 하기 전에 예외가 발생하여 종료를 하지 못하는 현상이 발생 될 수 있다.

해결 방법은 except 안에도 파일 종료 함수를 넣어주는데 이것은 같은 종료문을 두번써서 깔끔하지도 못하고 

소스를 보는데 방해만 된다.


아래는 좋은 방법이 아니다...

#!/usr/bin/python

# -*- coding: utf-8 -*-


try:

    f = open('C:\\newfile.txt','r')

    retval = 10/0

    print('파일 종료1')

    f.close()

    print('파일 종료2')

except ZeroDivisionError as e :

    print(e)

    print('파일 종료1')

    f.close()

    print('파일 종료2')



이제 finally를 사용하여 예외 발생 여부와 상관없이 종료를 시켜 보자


 try:

   [예외가 발생하는 실행 문]

 except 발생오류 as 오류 메시지 변수 :

   [보통 오류 메시지 발생된 것을 출력]

 finally:
   [예외 발생 여부와 상관없이 실행 해야 할 명령어]



#!/usr/bin/python

# -*- coding: utf-8 -*-


try:

    f = open('C:\\newfile.txt','r')

    retval = 10/0

except ZeroDivisionError as e :

    print(e)

finally:

    print('파일 종료1')

    f.close()

    print('파일 종료2')





try, pass



예외가 발생 하여도 처리하지 않고 회피 할 수 있는 방법이 있다.

그것은 바로 pass를 사용하는 것인데 특정 예외가 발생 하면 그 예외를 처리하지 않는 방법을 설명하겠다.


 try:

   [예외가 발생하는 실행 문]

 except 발생오류 as 오류 메시지 변수 :

   pass


예제는 아래와 같다. 

#!/usr/bin/python

# -*- coding: utf-8 -*-


try:

    retval = 10/0

except ZeroDivisionError as e :

    pass


반응형

'프로그램 > Python' 카테고리의 다른 글

[Python] Python cmd 결과 값 받는 방법  (0) 2016.12.12
[Python] 예외 처리, try, except, else  (0) 2016.11.26
[Python] 모듈 #2  (0) 2016.11.13
[Python] 모듈 #1  (0) 2016.11.12
[Python]클래스(3)  (0) 2016.11.02

파이썬 예외 처리



예외 처리의 필요성



프로그램을 수행하다가 예외가 발생하면 강제 종료가 되어 버린다.

예외가 발생해 프로그램 수행이 종료 되더라도 리소스 반환과 사용자가 알 수 있는 메시지를 출력하여

우화하게 종료 될 수 있도록 예외처리를 해야 한다.


다음 예제는 강제 종료가 되는 예제이다.


#!/usr/bin/python

# -*- coding: utf-8 -*-


retval = 10/0


아래와 같이 프로그램이 강제 종료가 된다.


Traceback (most recent call last):

  File "C:/6.��α� �����/python/try.py/try.py", line 4, in <module>

    retval = 10/0
ZeroDivisionError: integer division or modulo by zero



예외 처리 try ~ except




예외 처리를 하는 방법은 아래와 같다.

try: 다음에 예외가 발생 할지 모르는 실행문을 작성합니다.

예외가 발생하면 발생한 지점 이후는 실행하지 않고

바로 except 로 이동을 합니다.

except 다음에 프로그램을 실행 합니다.


 try:

   [예외가 발생하는 실행 문]

 except 발생오류 as 오류 메시지 변수 :

   [보통 오류 메시지 발생된 것을 출력]



위의 예제를 예외처리 해보겠습니다.

#!/usr/bin/python

# -*- coding: utf-8 -*-


try:

    retval = 10/0

except ZeroDivisionError as e :

    print(e)



아래와 같이 예외가 발생하여 메시지만 출력이 되며 강제 종료 되지 않는다.


integer division or modulo by zero



예외 처리 try ~ except ~ else




try 문에 수행 후 예외가 발생하지 않을 경우는 else를 사용해 실행문을 작성



 try:

   [예외가 발생하는 실행 문]

 except 발생오류 as 오류 메시지 변수 :

   [보통 오류 메시지 발생된 것을 출력]

 else:

   [예외 발생 하지 않을 경우 실행 문]


else를 사용하는 예제를 보겠습니다.

#!/usr/bin/python

# -*- coding: utf-8 -*-


try:

    retval = 10/2

except ZeroDivisionError as e :

    print(e)

else :
    print("retval : %d"%retval)


예외가 발생하지 않아 retval 값이 출력 된다.


retval : 5



이상으로 파이썬에서 예외처리 방법에 대해 설명 드렸습니다.

도움이 되셨나요?

반응형

'프로그램 > Python' 카테고리의 다른 글

[Python] Python cmd 결과 값 받는 방법  (0) 2016.12.12
[Python] 예외처리 try, finally, except pass  (0) 2016.11.28
[Python] 모듈 #2  (0) 2016.11.13
[Python] 모듈 #1  (0) 2016.11.12
[Python]클래스(3)  (0) 2016.11.02

C언어 주석



주석 사용법



주석으로 코드에 대한 설명을 작성 할 수 있게 한다.

주석이 달린 곳은 컴파일러가 인식하지 않아 소스를 컴파일하는데 아무런 지장을 주지 않는다.


주석 사용 방법은 다음과 같이

// 을 사용 하여 한줄 주석을 표시 할 수 있다.

 //주석문 입니다.



아래와 같이 /* */는 /* 시작하여 주석문을 작성 하여 */을 만날때 까지 주석으로 인식 한다.

그래서 여러줄의 주석을 작성 할 수 있다.

 /* 주석문 입니다.

주석문 입니다.

주석

*/




다음은 주석을 사용하는 예제입니다.


#include <stdlib.h>


int main(int argc, char *argv[]) {

//hello world가 출력 됩니다.

/*주석문입니다.

 주석문입니다.*/ 

printf("hello world");

return 0;

}



이상으로 C에서 주석문 사용하는 방법에 대해 설명 드렸습니다.

도움이 되셨나요?

반응형

'프로그램 > C' 카테고리의 다른 글

[C] 연산자  (0) 2017.03.07
[C] 함수  (0) 2017.03.05
[C] 변수  (0) 2016.10.31
[C] C 시작 ( Console 출력 )  (0) 2016.08.26
[C] 무료 개발 툴 Dev-C++ 설치  (0) 2016.08.24

자바 클래스와 인스턴스



클래스와 인스턴스



클래스는 무엇인가 DATA + 함수 즉 자료와 행동 두 가지를 모두 묶어서 관리 할 수 있는 사용자 자료 형이다.

int, char를 이용해 변수를 선언 하면 선언된 변수는 메모리에 올라간다.

이와같이 클래스를 이용해 변수를 선언하여 메모리에 올라가면 인스턴스라고 한다.

클래스 자체는 사용이 불가능 하지만 클래스를 이용해 인스턴스(객체)를 만들면 그때 부터는 사용이 가능하다.


다음예를 통해 이해를 도와 보자.


다들 어린 시절 학교 앞에서 뽑기를 해본 적이 있을 것이다. 

뽑기를 할때 국자에 소다와 설탕을 넣고 끓인 후 ☆ ♡ 등 모양의 틀로 찍고 그 모양대로 잘라먹은 기억을 다들 가지고 있을 것이다.


여기서 틀은 클래스라 생각 하자 틀을 찍어서 계속 뽑기를 여러개 만들 수 있는데 여기서 뽑기는 인스턴스라고 생각해보자

한개의 틀만 있으면 똑같은 뽑기를 계속 만들 수 있다. 


아래는 human이라는 클래스를 작성 해 봤다.

이것은 단지 클래스이며 또다른 사용자 정의 데이터형이다.

클래스 만으로는 어떠한 것도 할 수 없다.


public class human {

private int age;

private String name;

private String job;

public void showIntroduce()

{

System.out.println( "My Name is " + name );

System.out.println( "I`m " + age + " and my job is " + job );

}

}



자 아래는 위의 클래스를 가지고 인스턴스를 생성 하는 예이다.

아래 예 처럼 클래스는 한 개지만 한개의 클래스로 jack 인스턴스, hoke 인스턴스를 생성했다.

마치 int 자료형을 int a,b 여러게 할 당하는 것과 같은 것이다.


package sample;


public class sample {

public static void main(String[] args) {

   human jack = new human();

   human hoke = new human();

}


}



인스턴스를 생성하는 것은 아래와 같다.

 [클래스명] [인스턴스 명] = NEW 클래스 명()


여기서 클래스 명() 은 마치 함수 모양이 똑같다고 생각이 들 것이다.

이것은 생성자라고 부르며 생성자에 대해서는 다음에 설명 하도록 하겠다.


이상으로 클래스와 인스턴스에 대해 알아 봤다.

반응형

'프로그램 > Java' 카테고리의 다른 글

[Java] 생성자( Constructor )  (0) 2016.12.06
[Java] 함수(method) 사용법  (0) 2016.12.01
[Java] 데이터 타입  (0) 2016.11.20
[Java] 자바 기초, 컴파일, 실행  (0) 2016.11.19
[Java] Eclipse 설치  (0) 2016.11.18

+ Recent posts