티스토리 뷰
[모듈 임포트]
소스 코드를 작성하다 보면 하나의 파일에 모든 것을 담을 수 없다.
기능별로 모듈화 해서 여러 파일에 저장하게 된다.
여러파일에 있는 모듈들을 임포트해서 사용해보자!
zoo.py 에서 정의된 함수 find() 를 사용해 보자
def find():
print("find!")
다음과 같이 함수 하나를 정의했다.
이것을 root.py 에서 호출해보자
import zoo
zoo.find()
class Animal:
pass
import zoo
z = zoo.Animal()
import os
os.dir()
import os as winos
winos.dir()
[오류 발생]
오류를 처리하는 방법에 대해 알아보자
일단 파일을 열어서 처리할 때 만약 해당경로에 파일이 없으면 에러가 발생한다.
FileNotFoundError: [Errno 2] No such file or directory:
ZeroDivisionError: division by zero
IndexError: list index out of range
[try,except]
오류를 처리하는 try, except 의 기본구조를 알아보자
try:
4 / 0
except ZeroDivisionError as e:
print(e)
try 뒤에는 실행할 구문이 온다
except 뒤에는 발생 오류가 오고
as 뒤에는 오류 메세지를 담을 변수가 위치한다.
마지막으로 print 로 오류 메세지를 출력한다.
[try .. else]
else 문은 예외가 발생하지 않았을 때 실행된고
반드시 except 문 다음에 위치해야 한다.
try:
f = open('foo.txt', 'r')
except FileNotFoundError as e:
print(str(e))
else:
data = f.read()
f.close()
except 에서 정의된 에러가 발생하지 않으면 else 문을 실행한다.
foo.txt 라는 파일이 없으면 에러가 발생하고
그렇지 않다면 else 문의 코드를 처리한다.
[try .. finally]
try문에는 finally 절이 사용될 수 있다.
finally 절은 try문 수행 도중 예외 발생 여부에 상관없이 반드시 수행된다.
리소스를 close 해야하는 경우에 많이 사용된다.
f = open('foo.txt', 'w')
try:
# 무언가를 수행한다.
finally:
f.close()
파일이 열리고 try 에서 무언가 실행된다.
파일에서 얻은 데이터로 무언가를 했을때 에러가 나더라도
반드시 파일은 닫아줘야 하기 때문에
finally 에 close 코드를 위치시켰다.
[여러개 오류처리]
try 에서 한개의 오류가 아니라 여러개의 오류가 발생할 수 있다.
try:
a = [1,2]
print(a[3])
4/0
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
except IndexError:
print("인덱싱 할 수 없습니다.")
0으로 나눌떄, 인덱싱 오류일때 2개의 경우를 각각
except 문 2개로 처리하였다.
여기서는 0으로 나누기 전에 인덱싱 오류가 먼저 발생하여
except IndexError 절만 실행된다.
try:
a = [1,2]
print(a[3])
4/0
except (ZeroDivisionError, IndexError) as e:
print(e)
한개의 except 절에 두개의 발생에러를 처리할 수도 있다.
[오류 회피]
경우에 따라서는 특정 오류를 그냥 통과시켜야 할 때가 있다.
try:
f = open("없는파일", 'r')
except FileNotFoundError:
pass
파일이 없을 때 오류를 발생시키고
그때는 그냥 통과한다.
pass 는 아무것도 하지 않는다는 의미이다.
[오류 의도적으로 발생시키기]
오류가 발생하지 않도록 보통 노력하는데
의도적으로 에러를 발생시키는게 이상할 수 있다.
하지만 경우에 따라서 발생 시킬때도 있다.
class Bird:
def fly(self):
raise NotImplementedError
Bird 라는 클래스를 상속 받는 클래스가
fly 함수를 재정의 하지 않으면 에러가 발생한다.
즉 자식 클래스에서 반드시 fly 함수를 구현하라는 의도이다.
raise 는 명령어를 이용해 오류를 강제로 발생시킬 수 있다.
NotImplementedError는 파이썬 내장 오류로, 꼭 작성해야 하는 부분이 구현되지 않았을 경우 일부러 오류를 발생시키고자 사용한다.
class Eagle(Bird):
pass
e = Eagle()
e.fly()
Eagle 은 Bird 를 상속 받는데
fly 를 구현하지 않고 상속 받은것을 그대로 사용한다면
에러가 발생한다.
[예외 만들기]
프로그램이 동작될때 특수한 경우에만 예외처리를 하기 위해
가끔은 예외를 만들어서 사용하게 된다.
class MyError(Exception):
pass
Exception 을 상속 받아서 새로운 예외를 만들었다.
def say_nick(nick):
if nick == '바보':
raise MyError()
print(nick)
'바보'라는 닉이 들어 왔다면 에러를 발생 시킨다.
try:
say_nick("천사")
say_nick("바보")
except MyError:
print("허용되지 않는 별명입니다.")
이렇게 에러처리를 해줄 수 있다.
except 절에서 print 문으로 하드코딩하지 말고
에러메세지를 받아서 출력해 보자.
class MyError(Exception):
def __str__(self):
return '허용되지 않는 별명입니다.'
def say_nick(nick):
if nick == '바보':
raise MyError()
print(nick)
try:
say_nick("천사")
say_nick("바보")
except MyError as e:
print(e)
__str__ 은 클래스를 대표하는 문자열이다.
에러가 발생될때 에러메세지를 __str__ 로 전달할 수 있다.
[with as]
파일을 다룰 때는 마지막에 close 로 닫아 주어야 한다.
with 블록을 사용하면 명시적으로 close() 메서드를 호출하지 않고 파일을 닫을 수 있다.
with 블록이 자동으로 블록을 종료할 때 __exit__() 메서드를 호출하여
파일을 close 시키게 된다.
with open('test.txt', mode='wt', encoding='utf-8') as f:
f.write('파이썬으로 파일을 작성하고 있습니다.')
f.write('newline 문자로 개행해봅니다.\n')
f.write('개행이 잘되었나요?')
with 블록, 즉 들여쓰기 안에 모든 코드가 끝나면
자동으로 close 시키게 된다.
'python lecture > basic' 카테고리의 다른 글
[edu] 파이썬 시작하기 - 11 (thread) (0) | 2018.09.24 |
---|---|
[edu] 파이썬 시작하기 - 10 (decorator) (0) | 2018.09.21 |
[edu] 파이썬 시작하기 - 6 (0) | 2018.08.28 |
[edu] 파이썬 시작하기 - 5 (0) | 2018.08.27 |
[edu] 파이썬 시작하기 - 4 (0) | 2018.08.27 |
- Total
- Today
- Yesterday
- gitignore
- admin.py
- 장고
- Tistory
- pycrypto
- 파이썬 강좌
- 플러스친구 자동응답
- Python
- PuTTYGen
- 문과 코딩
- chatbot
- 파이썬 프로그래밍
- django
- 파이썬 독학
- 파이썬 입문
- GIT
- 모바일 스킨 적용
- 모바일 테마 적용
- 이미지 비교
- gitlab
- wsgi
- 문서 비교
- 면접답변
- 파이썬
- 면접정답
- virtualenv
- 장고 카톡 자동응답
- 엑셀 비교
- 장고 플러스친구 자동응답
- django chatbot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |