OneBook(Python & Deep Learning)
  • 한곳에서 끝내는 파이썬 & 머신러닝 & 딥러닝
  • 문서 작업을 시작하며
  • 1. 인공지능(Artificial Intelligence) 시대
    • 1.1. 인공지능이란 도대체 무엇인가?
    • 1.2. 4차 산업혁명
    • 1.3. 인공지능의 역사
    • 1.4. 인공지능 > 머신러닝 > 딥러닝
    • 1.5. 머신러닝
    • 1.6. 머신러닝 알고리즘
      • 1.6.1. 지도 학습 (Supervised Learning)
      • 1.6.2. 비지도 학습 (Unsupervised learning)
      • 1.6.3. 강화 학습(Reinforcement Learning)
    • 1.7. 인공신경망(ANN)
    • 1.8. 딥러닝
  • 2. 기본 상식
    • 2.1. 기본 용어의 이해
      • 2.1.1. CPU와 GPU의 차이
      • 2.1.2. 오픈소스(Open Source)
      • 2.1.3. 깃허브(GitHub)
      • 2.1.4. 위키 Wiki
      • 2.1.5. 아나콘다(Anaconda)
      • 2.1.6. 활성화 함수
      • 2.1.5. 딥러닝 프레임워크 소개
    • 2.2. 텐서플로(Tensorflow)
    • 2.3. 케라스(Keras)
    • 2.4. 파이토치(PyTorch)
    • 2.5. 학습에 필요한 중요한 도구와 라이브러리들
      • 2.5.1. 주피터 노트북(Jupyter Notebook)
      • 2.5.2. 파이참(PyCharm)
      • 2.5.3. 스파이더(Spyder)
      • 2.5.4. 넘파이(NumPy)
      • 2.5.5. 싸이파이(SciPy)
      • 2.5.6. Matplotlib
      • 2.5.7. 판다스(Pandas)
      • 2.5.8. 장고(Django)
      • 2.5.9. 파이큐티(pyQT)
      • 2.5.10. 싸이킷런(Scikit-learn)(Sklearn)
      • 2.5.11. CUDA & cuDNN
      • 2.5.12. 파이썬 표준 내장 라이브러리
    • 2.6. AI공부에 필요한 기본지식 3가지
      • 2.6.1. 수학
      • 2.6.2. 프로그래밍 기술
      • 2.6.3. AI의 적용 대상 산업에 대한 지식
  • 3. 개발 환경설정
    • 3.1. 윈도우 환경에서 설치하기
      • 3.1.1. 아나콘다 설치 (파이썬 설치)
        • 1) 아나콘다 패키지 업데이트
        • 2) conda에서 파이썬 가상 환경 (virtual environments) 생성하기
        • 3) NVIDIA GPU 환경 설정하기
      • 3.1.2. 텐서플로 설치
      • 3.1.3. 케라스 설치
      • 3.1.4. Jupyter Notebook 설치
      • 3.1.5. Visual Studio Code 설치
      • 3.1.6. 파이참 설치
        • 1) 파이참 가상환경 설정
        • 2) 파이참 환경 설정
        • 3) 설치된 라이브러리들의 버전 확인 하기
    • 3.2. 리눅스 환경에서 설치하기
      • 3.2.1. 아나콘다 설치(파이썬 설치)
      • 3.2.2. 텐서플로 설치
      • 3.2.3. 케라스 설치
      • 3.2.4. 장고 설치
      • 3.2.5. 파이참(PyCharm) 설치
        • 1) 파이참 가상환경 설정
  • 4. 파이썬 기초 학습
    • 4.1. 파이썬(Python)
    • 4.2. 파이썬의 특징
    • 4.3. 파이썬 기본 문법
      • 4.3.1. 대화형과 스크립트 모드 프로그래밍
      • 4.3.2. 모듈의 사용(import)
      • 4.3.3. 파이썬 식별자(Identifiers)
      • 4.3.4. 예약어(Reserved Words)
      • 4.3.5. 행(Lines)과 들여쓰기(Indentation)
      • 4.3.6. 문자열 표시
      • 4.3.7. 주석
      • 4.3.8. 파이썬 변수(Variables)
    • 4.4. 자료형과 연산자
      • 4.4.1. 자료형
      • 4.4.2. 파이썬 연산자
    • 4.5. 조건문과 반복문
      • 4.5.1. 조건문
      • 4.5.2. 반복문
    • 4.6. 함수
      • 4.6.1. 함수의 종류
    • 4.7. 모듈(Modules)
      • 4.7.1. 모듈의 참조 위치
      • 4.7.2. 네임스페이스(Namespace)와 범위(Scoping)
      • 4.7.3. dir( ) 함수
      • 4.7.4. 패키지(Packages)
      • 4.7.5. 기본 내장 모듈
    • 4.8. 숫자형 활용
      • 4.8.1. 실습: 계산기 만들기
    • 4.9. 문자열(Strings) 활용
      • 4.9.1. Unicode 한글의 사용
      • 4.9.2. 이스케이프 문자
      • 4.9.3. 문자열 연산자
      • 4.9.4. 문자열 포맷 연산자
      • 4.9.5. 내장 문자열 함수
    • 4.10. 시퀀스(Sequence) 자료형 활용
      • 4.10.1. 리스트(Lists)
      • 4.10.2. 튜플(Tuple)
      • 4.10.3. 딕셔너리(Dictionary)
    • 4.11 Class
    • 4.12. Date & Time
    • 4.13. 파이썬 에러처리
  • 5. 기초수학
  • 6. 머신러닝을 위한 파이썬
  • 7. 텐서플로 2.x
  • 8. 딥러닝을 이용한 자연어 처리 입문
  • 9. 파이토치로 시작하는 딥 러닝 입문
  • 9.6 6. Pytorch lightning
  • A1. 필수 학습 라이브러리들
    • 4.1 NumPy
      • 4.1.1. Basic Operations
      • 4.1.2. Indexing, Slicing 그리고 Iterating
      • 3.13.3. Shape Manipulation
    • 4.2 Matplotlib
    • 4.3 SciPy
      • 4.3.1. Interpolation
      • 4.3.2. Optimization
      • 4.3.3. Fast Fourier transforms: scipy.fftpack
    • 4.4 Pandas
      • 4.4.1 Pandas 자료구조
      • 4.4.2 Pandas 활용하기
  • A2. 머신러닝 & 딥러닝
    • 5.1. 머신러닝 개념 소개
      • 5.1.1. 경사하강법(Gradient Descent )
      • 5.1.2. 분류 (Classification)
      • 5.1.3. MNIST Dataset 소개
    • 5.2. 딥러닝 개념 소개
      • 5.2.1. 퍼셉트론
      • 5.2.2. 인공 신경망
      • 5.2.3. 대표적인 딥러닝 모델
    • 5.3. Tensorflow를 사용한 학습
      • 5.3.1. TensorFlow 기본 메커니즘
      • 5.3.2. Tensorflow Types
      • 5.3.3. 기본 동작 실습
      • 5.3.4. 선형 회귀
      • 5.3.5 로지스틱 회귀
    • 5.4. Keras를 사용한 학습
      • 5.4.1. Keras로 분석한 선형 회귀
      • 5.4.2. CNN(Convolutional Neural Network)
      • 5.4.3. Fashion MNIST with Keras
    • 5.5. 웹 크롤링
      • 5.5.1. requests와 BeautifulSoup으로 웹 크롤러 만들기
Powered by GitBook
On this page

Was this helpful?

  1. 4. 파이썬 기초 학습

4.13. 파이썬 에러처리

Previous4.12. Date & TimeNext5. 기초수학

Last updated 6 years ago

Was this helpful?

프로그램을 만들다 보면 수없이 많은 에러가 발생합니다. 물론 오류가 발생하는 이유는 프로그램이 잘못 동작되는 것을 막기 위한 것입니다. Python은 Python 프로그램의 예상치 못한 오류를 처리하고 디버깅 기능을 추가하는 두 가지 중요한 기능을 제공합니다.

  • 예외 처리(Exception Handling)

  • 어설션(Assertions)

3.13.1. Assertions

프로그램의 특정 지점에서 반드시 참(True)이 되어야 하는 문장을 말합니다. 일반적으로 오류를 확인하기 위해 코드에 Assertion을 넣습니다. Assertion이 실패하면 (즉, 표현식이 거짓으로 평가되는 경우) 프로그램이 중지되고 오류 메시지가 표시됩니다.

다음의 예제를 실행해 보면 개념이 명확해집니다.

import time
 lists = [1,3,6,3,8,7,13,23,13,2,3.14,2,3,7]

 def test(t):
     print("현재 수행중인 값 =" + str(t))
     assert (type(t) is int), "주어진 값 " + str(t) + " 은 정수가 아닙니다"

 for i in lists:
   test(i)
   time.sleep(1)
현재 수행중인 값 =23
현재 수행중인 값 =13
현재 수행중인 값 =2
현재 수행중인 값 =3.14
Traceback (most recent call last):
  File "C:/Users/nains/PycharmProjects/OneBook/JustTest.py", line 9, in <module>
    test(i)
  File "C:/Users/nains/PycharmProjects/OneBook/JustTest.py", line 6, in test
    assert (type(t) is int), "주어진 값 " + str(t) + " 은 정수가 아닙니다"
AssertionError: 주어진 값 3.14 은 정수가 아닙니다
Process finished with exit code 1

3.13.2. 예외 처리(Exception Handling)

문법과 관련된 에러는 파이썬 인터프리터에서 에러메시지를 표시하여 디버깅이 가능합니다. 문장이나 표현식이 문법적으로 올바르다 할지라도, 실행하려고 하면 에러를 일으킬 수 있습니다. 실행 중에 감지되는 에러들을 예외(Exception) 라고 합니다. 예외는 프로그램 실행 중에 발생하여 프로그램의 명령 흐름을 방해하는 이벤트입니다. 일반적으로, 파이썬은 대처할 수 없는 상황에 처하게 되면 예외를 발생시킵니다. 예외는 오류를 나타내는 Python 객체입니다. 예외가 발생되면 즉시 예외를 처리해야합니다. 그렇지 않으면 파이썬이 종료됩니다.

예외처리를 위해 try, except문을 사용합니다. try, except 문에 대한 기본적인 구조는 아래와 같습니다.

try:
   You do your operations here;
   ......................
except ExceptionI:
   If there is ExceptionI, then execute this block.
except ExceptionII:
   If there is ExceptionII, then execute this block.
   ......................
else:
   If there is no exception then execute this block. 

예외를 발생시킬 수 있는 의심스러운 코드가 있는 경우 try: 블록에 의심스러운 코드를 넣어 프로그램을 방어적으로 코딩합니다. try: 블록 다음에 except: 문을 포함시키고 예외 문제를 처리하는 코드 블록을 추가합니다.

이 예제는 쓰기 권한을 주고 파일을 열어 기록 하므로 정상 적으로 처리 됩니다.

try:
    fh = open("testfile", "w")
    fh.write("This is my test file for exception handling!!")
 except IOError:
    print("Error: can\'t find file or read data")
 else:
    print("Written content in the file successfully")
    fh.close()

아래 예제는 쓰기 권한이 없이 파일을 열고 기록을 시도하므로 예외가 발생합니다.

try:
    fh = open("testfile", "r")
    fh.write("This is my test file for exception handling!!")
 except IOError:
    print("Error: can\'t find file or read data")
 else:
    print("Written content in the file successfully")

아래 코드와 같이 finally 문을 사용 할 수도 있습니다.

try:
    fh = open("testfile", "w")
    try:
       fh.write("This is my test file for exception handling!!")
    finally:
       print("Going to close the file")
       fh.close()
 except IOError:
    print("Error: can\'t find file or read data")

try 블록에서 예외가 발생하면 finally 블록으로 즉시 전달됩니다. finally 블록의 모든 명령문이 실행된 후에 예외가 다시 발생하고 try-except 문의 다음 상위 계층에 있으면 exceptsatements에서 처리됩니다.

3.13.3. Exception의 인수(Argument)

exception에는 추가 정보를 제공하는 인수가 있을 수 있습니다. 인수의 내용은 예외에 따라 다릅니다. 다음과 같이 except 절에 변수를 제공하여 예외의 인수를 캡처합니다.

try:
   You do your operations here;
   ......................
except ExceptionType, Argument:
   You can print value of Argument here...

단일 exception을 처리하기위한 코드를 작성하는 경우 except 문에서 예외 이름 뒤에 변수를 지정할 수 있습니다. 여러 exception을 트래핑하는 경우 exception 튜플을 사용할 수 있습니다.

이 변수는 대부분 exception의 원인을 포함하는 exception의 값을 받습니다. 변수는 하나의 값 또는 튜플 형태의 다중 값을 수신할 수 있습니다. 이 튜플은 대개 오류 문자열, 오류 번호 및 오류 위치를 포함합니다.

# Define a function here.
 def temp_convert(var):
    try:
       return int(var)
    except ValueError as Argument:
       print("The argument does not contain numbers\n", Argument)

 # Call above function here.
 temp_convert("xyz");

위의 코드는 다음과 같은 결과로 처리 됩니다.

The argument does not contain numbers
 invalid literal for int() with base 10: 'xyz'

3.13.4. Exceptions의 발생

raise 문을 사용하여 여러 가지 방법으로 예외를 발생시킬 수 있습니다. raise 문에 대한 일반적인 구문은 다음과 같습니다.

raise [Exception [, args [, traceback]]]

여기서 Exception은 예외의 유형 (예: Error명)이고 argument는 예외 인수 값입니다. 인수는 선택 사항으로 제공되지 않으면 예외 인수는 없는것으로 처리됩니다.

마지막 인자인 traceback은 선택적이며 (실제로는 거의 사용되지 않는다.), 존재한다면 예외에 사용되는 traceback 객체입니다.

예외는 문자열, 클래스 또는 객체가 될 수 있습니다. 파이썬 코어가 제기하는 대부분의 예외는 클래스이며, 클래스의 인스턴스인 인수가 있습니다. 새로운 예외를 정의하는 것은 매우 쉽고 다음과 같이 할 수 있습니다.

def functionName( level ):
   if level < 1:
      raise "Invalid level!", level
      # The code below to this would not be executed
      # if we raise the exception

다음과 같은 예제를 실행해 보겠습니다.

x = 5
if x < 10:
    raise ValueError('x should not be less than 10!')