Programming/Python

[혼공챌린지]python 오류(Error)

Hayley Shim 2021. 8. 2. 00:27



5주차 과제
기본미션 : 구문 오류와 예외의 차이 설명하기 / 혼공 용어 노트에 나만의 언어로 객체, 클래스, 인스턴스, 생성자, 메소드 보충 설명쓰고 인증샷

오류 종류
- 구문 오류(syntax error) : 프로그램 실행 전에 발생하는 오류
- 예외(exception) 또는 런타임 오류(runtime error) : 프로그램 실행 중에 발생하는 오류

구문 오류 : SyntaxError, 구문에 문제가 있어 프로그램이 실행조차 되지 않는 오류. 해결을 위해 코드를 제대로 수정해야 함

print("프로그램이 시작되었습니다") 
print("프로그램이 시작되었습니다)

 

예외 : 예외 또는 런타임 오류는 실행 중에 발생하는 오류. 해결법도 구문 오류와 다르지 않다. 코드를 제대로 작성하면 된다.

print("프로그램이 시작되었습니다") 

list_a[1]


기본 예외 처리 : 예외를 해결 하는 모든 것
- 조건문을 사용하는 방법(기본 예외 처리)
- try 구문을 사용하는 방법

예외 상황 확인하기
-> 예를 들어 정수를 입력하라했는데, 정수가 아닌 수를 입력하는 상황 고려하기

조건문으로 예외 처리하기

#숫자 입력 
user_input_a = input("정수입력> ") 

#사용자 입력이 숫자로만 구성되어 있을 때 
if user_input_a.isdigit(): #isdigit() 함수를 사용해서 숫자로만 구성된 글자인지 확인 

  #숫자로 변환 
  number_input_a = int(user_input_a) 

  #출력 
  print("원의 반지름:", number_input_a) 
  print("원의 둘레:", 2*3.14*number_input_a) 
  print("원의 넓이:", 3.14,*number_input_a * number_input_a) 
  
else: 
	print("정수를 입력하지 않았습니다")

try except 구문
- 예외가 발생할 가능성이 있는 코드를 모두 try 구문 안에 넣고 예외가 발생했을 때 실행할 코드를 모두 except 구문 안에 넣으면 됨

#try except 구문으로 예외를 처리합니다 
try: 
	#숫자로 변환합니다. 
	number_input_a = int(input("정수 입력> ")) 
    
    #출력합니다 
    print("원의 반지름:", number_input_a) 
    print("원의 둘레:", 2*3.14*number_input_a) 
    print("원의 넓이:", 3.14 * number_input_a * number_input_a) 
except: 
	print("무언가 잘못되었습니다.")

try except else 구문
- try except 구문 뒤에 else 구문을 붙여서 '예외가 발생하지 않았을 때 실행할 코드'를 지정할 수 있음

#try except else 구문으로 예외를 처리함 

try: 
	#숫자로 변환 
	number_input_a = int(input("정수 입력> ")) 
    
except: 
	print("정수를 입력하지 않았습니다") 
    
else: 
	#출력 
    print("원의 반지름:", number_input_a) 
    print('원의 둘레:', 2*3.14*number_input_a) 
    print("원의 넓이:", 3.14*number_input_a*number_input_a)

finally 구문
- 예외가 발생하든 발생하지 않은 무조건 실행할 때 사용하는 코드

#try except 구문으로 예외를 처리 
try: 

	#숫자를 변환 
    number_input_a = int(input("정수 입력> ")) 
    
    #출력함 
    print("원의 반지름:", number_input_a) 
    print("원의 둘레:", 2*3.14*number_input_a) 
    print("원의 넓이:", 3.14*number_input_a * number_input_a) 

except: 
	print("정수를 입력해달라고 했잖아요?!") 
else: 
	print("예외가 발생하지 않았습니다") 

finally: 
	print("일단 프로그램이 어떻게든 끝났습니다.")


try, except, finally 구문의 조합
- try 구문은 단독으로 사용할 수 없으며 반드시 except 구문 또는 finally 구문과 함께 사용해야 한다
- else 구문은 반드시 except 구문 뒤에 사용해야 한다

예외 객체 : 예외가 발생하면 예외와 관련된 정보가 생기는데. 이를 예외 객체라 한다

#try except 구문으로 예외를 처리함 
try: 
	#숫자로 변환함 
    number_input_a = int(input('정수 입력> ')) 
    
    #출력함 
    print("원의 반지름: ", number_input_a) 
    print("원의 둘레:", 2*3.14*number_input_a) 
    print("원의 넓이:", 3.14*number_input_a * number_input_a) 
except Exception as exception: 
	#예외 객체를 출력 
    print("type(exception):", type(exception)) 
    print("exception:", exception)

실행결과

-> 예외 객체의 자료형은 Value Error, 내용은 invalid literal for int() with base 10: '<입력한 문자열>' 이 출력됨

예외 구분하기
- 예외가 발생할 수 있는 코드 예

#변수를 선언 
list_number = [52, 273, 32, 72, 100] 

#try except 구문으로 예외를 처리함 
try: 
	#숫자를 입력받음 
	number_input = int(input("정수 입력> ")) 

	#리스트의 요소를 출력 
	print("{}번째 요소: {}".format(number_input, list_number[number_input])) 
    
except Exception as exception: 
	#예외 객체를 출력 
    print("type(exception):", type(exception)) 
    print("exception:", exception)

1. 정상적으로 정수를 입력한 경우 : 예외 발생하지 않음
2. 정수로 변환될 수 없는 값을 입력한 경우 : ValueError 발생
3. 정수를 입력하지만 리스트의 길이를 넘는 인덱스를 입력한 경우 : IndexError 발생

-예외 구분하기

#변수를 선언 
list_number = [52, 273, 32, 72, 100] 

#try except 구문으로 예외를 처리함 
try: 
	#숫자를 입력받음 
    number_input = int(input("정수 입력> ")) 
    
    #리스트의 요소를 출력 
    print("{}번째 요소: {}".format(number_input, list_number[number_input])) 
    
except ValueError: 
	#ValueError가 발생하는 경우 
    print("정수를 입력해 주세요") 

except IndexError: 
	#IndexError가 발생하는 경우 
    print("리스트가 인덱스를 벗어났어요")


-예외 구분 구문과 예외 객체 : except 구문 뒤에 예외 객체를 붙여 활용할 수 있음. 마찬가지로 as 키워드를 사용하면 됨

#변수를 선언 
list_number = [52, 273, 32, 72, 100] 

#try except 구문으로 예외를 처리함 
try: 
	#숫자를 입력받음 
    number_input = int(input("정수 입력> ")) 
    
    #리스트의 요소를 출력 
    print("{}번째 요소: {}".format(number_input, list_number[number_input])) 
except ValueError as exception: 
	#ValueError가 발생하는 경우 
    print("정수를 입력해 주세요") 
    print("exception:", exception) 

except IndexError as exception: 
	#IndexError가 발생하는 경우 
    print("리스트가 인덱스를 벗어났어요") 
    print("exception:", exception)


모든 예외 잡기 : else 구문처럼 마지막에는 모든 예외의 부모라할 수 있는 Exception을 넣어서 프로그램이 죽지 않게하는 것이 좋다.

#변수를 선언 
list_number = [52, 273, 32, 72, 100] 

#try except 구문으로 예외를 처리함 
try: 
	#숫자를 입력받음 
	number_input = int(input("정수 입력> ")) 
    
    #리스트의 요소를 출력 
    print("{}번째 요소: {}".format(number_input, list_number[number_input])) 
    예외.발생해주세요() 
    
except ValueError as exception: 
    #ValueError가 발생하는 경우 
    print("정수를 입력해 주세요") 
    print("exception:", exception) 
    
except IndexError as exception: 
	#IndexError가 발생하는 경우 
    print("리스트가 인덱스를 벗어났어요") 
    print("exception:", exception)
    
except Exception as exception: 
    print("미리 파악하지 못한 예외가 발생했습니다.") 
    print(type(exception), exception)

raise 구문 : 아직 구변되지 않은 부분이므로 일부러 예외를 발생시켜 프로그램을 죽게 만들어 잊어버리지 않도록 하는 키워드. 예외를 강제로 발생시키는 기능을 함

#입력을 받습니다 
number = input("정수 입력> ") 
number = int(number) 

#조건문 사용 
if number > 0: 
	#양수일 때: 아직 미구현 상태 
	raise NotImplementedError 
else: 
	#음수일 때: 아직 미구현 상태 
	raise NotImplementedError


교육도서 : 혼자 공부하는 파이썬 https://book.naver.com/bookdb/book_detail.nhn?bid=15028688

 

혼자 공부하는 파이썬

혼자 해도 충분하다! 1:1 과외하듯 배우는 파이썬 프로그래밍 자습서(파이썬 최신 버전 반영)27명의 베타리더 검증으로, ‘함께 만든’ 입문자 맞춤형 도서이 책은 독학으로 프로그래밍 언어를

book.naver.com

 

광고 수익은 기부 활동에 사용됩니다

정보를 얻으신 분들은 광고 클릭 부탁드려요 :)

'Programming > Python' 카테고리의 다른 글

혼자 공부하는 파이썬  (0) 2021.08.31
[혼공챌린지]python scraping  (0) 2021.08.09
[혼공챌린지]python 함수  (0) 2021.07.26
[혼공챌린지]python 자료형  (0) 2021.07.19
[혼공챌린지]python 조건문  (0) 2021.07.10