Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- padding 속성
- RGBA
- br 태그
- reveal in file explorer
- 전체 선택자
- html
- css
- sup태그
- sub태그
- html 태그
- width속성
- html tag i
- 자식결합자
- 인접 형제 결합자
- 임베디드
- background-color 속성
- iframe 태그
- focus 의사클래스
- i 태그
- not 의사클래스
- 아두이노
- id 선택자
- iframe
- height속성
- 일반 형제 결합자
- Live Server
- Checked 의사 클래스
- tag html
- RGB
- go live
Archives
- Today
- Total
so woon!
python_14일차 본문
## 301page)
try:
filename = input('열고자 하는 파일명을 입력하세요 >>> ') #예외발생 가능성이 있는 코드
file = open(filename, 'rt') #읽을것이니 r, 텍스트니 t #파일 열기
except FileNotFoundError: #예외 발생했을 때 실행(파일이 존재하지 않을 때)
print('{} 파일이 존재하지 않습니다.'.format(filename))
else: #예외가 발생하지 않았을 때 실행(정상적)
buffer = file.read()
print(buffer)
file.close #파일 닫기
finally: #무조건 실행
print('프로그램을 종료합니다.')
============실행결과===============
열고자 하는 파일명을 입력하세요 >>> 엄마돼지아기돼지.txt
토실토실 아기돼지 젖달라고 꿀꿀꿀
엄마돼지 오냐오냐 알았다고 꿀꿀꿀
꿀꿀 꿀꿀 꿀꿀 꿀꿀 꿀꿀꿀꿀 꿀꿀꿀꿀 꿀꿀꿀꿀꿀
아기돼지 바깥으로 나가자고 꿀꿀꿀
엄마돼지 비가와서 안된다고 꿀꿀꿀
꿀꿀 꿀꿀 꿀꿀 꿀꿀 꿀꿀꿀꿀 꿀꿀꿀꿀 꿀꿀꿀꿀꿀
프로그램을 종료합니다
============실행결과===============
열고자 하는 파일명을 입력하세요 >>> a.txt
a.txt 파일이 존재하지 않습니다.
프로그램을 종료합니다.
## 강제로 예외 발생시키기 (raise) ##
예외를 강제로 발생시킴
1. 프로그램 개발 단계에서 아직 구현되지 않은 부분에 일부러 예외를 발생시켜 #일부러 에러 발생시켜서 안한거 알게끔 하는 용도
잊어버리지 않도록 하는 경우에 활용
2. 파이썬이 예외로 인식하지 못하지만 실제로는 예외인 경우 (ex.나이)
## ex)
num = int(input('정수를 입력하세요 : '))
if num > 0:
raise '아직 구현되지 않은 코드입니다!'
else:
print('0또는 음수입니다!')
============실행결과===============
정수를 입력하세요 : 3
Traceback (most recent call last):
File "C:\Python_저녁\실습.py", line 6, in <module>
raise '아직 구현되지 않은 코드입니다!'
TypeError: exceptions must derive from BaseException
============실행결과===============
정수를 입력하세요 : -1
0또는 음수입니다!
## 303page)
try: #이 곳에 예외 발생 가능한 코드를 넣음
score = int(input('점수를 입력하세요 >>> '))
if score < 0 or score > 100: #점수 범위를 벗어난다면
raise Exception('점수는 0~100 사이입니다.') #Exception은 예외의 엄마
except Exception as e:
print(e) #예외 메시지 출력
else: #정상적인 경우
if score >= 80:
print('{}점은 합격입니다.'.format(score))
else:
print('{}점은 불합격입니다.'.format(score))
============실행결과===============
점수를 입력하세요 >>> -10
점수는 0~100 사이입니다.
============실행결과===============
점수를 입력하세요 >>> 85
85점은 합격입니다.
============실행결과===============
점수를 입력하세요 >>> 75
75점은 불합격입니다.
## 305page)
class NameError(Exception): #Exception 클래스 상속 받음
def __init__(self, message):
super().__init__(message) #부모에 이 코드가 있기 때문에 super
try:
name = input('이름을 입력하세요 >>> ')
if len(name) < 2 or len(name) > 6:
raise NameError('이름은 2~6자 사이로 입력해주세요. ') #강제로 예외 발생
except NameError as e:
print(e) #메시지 출력
else:
print('입력된 이름은 {}입니다.'.format(name))
============실행결과===============
이름을 입력하세요 >>> 잉
이름은 2~6자 사이로 입력해주세요.
============실행결과===============
이름을 입력하세요 >>> ㅇㅇ
입력된 이름은 ㅇㅇ입니다.
## pass 구문 ##
예외 발생하면 바로 처리해야 하지만 크게 중요한 부분이 아닐 경우
프로그램의 강제 종료를 막는 목적으로 pass를 사용함
<형식>
try:
예외가 발생할 가능성이 있는 코드
except:
pass
## ex)
li = ['52', '123', '29', '파이썬', '111']
li_num = [] #숫자만 담을 빈 리스트 생성
for i in li: #li 에 있는 값들을 하나씩 꺼내어 반복 i=52,123,29...
try:
result = int(i) #정수형인 숫자로 변환
li_num.append(result) #예외없이 통과한 값만 li_num에 추가
except:
pass #예외 발생하면 그냥 넘어감
print(li_num)
============실행결과===============
[52, 123, 29, 111]
## 섹션 17 응용예제 1번)
class Quiz:
answer = ['경기도', '강원도', '충청남도', '충청북도', '전라남도', '전라북도',
'경상북도', '경상남도', '제주특별자치도'] #클래스 변수
@classmethod
def challenge(cls): #클래스 메서드 정의
if not cls.answer: # 값이 없다는 뜻은 다 맞췄다는 뜻임
print('모든 도를 맞췄습니다. 성공입니다!')
return #함수 종료
do = input('정답은 ?? >>> ') #우리가 하는 대답
if do not in cls.answer: #틀렸다면 #do의 값이 cls.answer에 포함되어 있지 않다면
raise Exception('틀렸습니다.') #예외를 발생시킴
for i, answer_do in enumerate(cls.answer):
if do == answer_do: #정답과 대답이 같다면
print('정답입니다')
cls.answer.pop(i) #i번째 값을 꺼내어 삭제
break
cls.challenge() #내가 나 자신을 호출하는 것 #계속 호출시켜 반복시키도록 하는 용도
try:
print('우리나라의 9개의 모든 도를 맞히는 퀴즈입니다. 하나씩 대답하세요.')
Quiz.challenge() #클래스 메서드 호출
except Exception as e:
print(e) #예외 메시지 출력
============실행결과===============
우리나라의 9개의 모든 도를 맞히는 퀴즈입니다. 하나씩 대답하세요.
정답은 ?? >>> 경기도
정답입니다
정답은 ?? >>> 강원도
정답입니다
정답은 ?? >>> 충청남도
정답입니다
정답은 ?? >>> 충청북도
정답입니다
정답은 ?? >>> 전라북도
정답입니다
정답은 ?? >>> 전라남도
정답입니다
정답은 ?? >>> 경상북도
정답입니다
정답은 ?? >>> 경상남도
정답입니다
정답은 ?? >>> 제주특별자치도
정답입니다
모든 도를 맞췄습니다. 성공입니다!
============실행결과===============
우리나라의 9개의 모든 도를 맞히는 퀴즈입니다. 하나씩 대답하세요.
정답은 ?? >>> 대구
틀렸습니다.
## 섹션 17 응용예제 2번)
import random
class UpDown:
def __init__(self): #생성자
self.answer = random.randint(1, 100) #컴퓨터가 생각한 정답
self.count = 0 #시도횟수
def challenge(self): #인스턴스 메서드 정의
self.count += 1 #시도 횟수를 1 증가
n = int(input('입력(1~100) >>> ')) #사용자로부터 숫자를 입력받음
if n < 1 or n > 100: # 1~100 외의 숫자면 예외 발생시킴
raise Exception('1~100 사이만 입력하세요.')
return n #입력값을 반환
def play(self): #인스턴스 메서드 정의
while True:
try:
n = self.challenge() #숫자 입력받는다. #위에서 return된 값이 n에 들어감
except Exception as e:
print(e) #예외 메시지를 출력
else: #예외가 발생하지 않았다면(정상적이라면)
if self.answer < n:
print('Down!!')
elif self.answer > n:
print('Up!!')
else: #정답일 경우
print('{}번만의 정답입니다.'.format(self.count))
break
game = UpDown() #객체(인스턴스) 생성
game.play() #인스턴스 메서드 호출
============실행결과===============
입력(1~100) >>> 56
Up!!
입력(1~100) >>> 57
Up!!
입력(1~100) >>> 60
Up!!
입력(1~100) >>> 80
Up!!
입력(1~100) >>> 80
Up!!
입력(1~100) >>> 90
Up!!
입력(1~100) >>> 92
Up!!
입력(1~100) >>> 93
Up!!
입력(1~100) >>> 98
9번만의 정답입니다.
## 섹션 17 응용예제 3번)
class BankError(Exception): #Exception을 물려받음 #예외클래스
def __init__(self, message):
super().__init__(message)
class BankAccount:
# 생성자
def __init__(self, acc_no, balance):
self.acc_no = acc_no #계좌번호
self.balance = balance #통장잔액
# 입금 기능
def deposit(self, money):
if money <= 0: #0원 이하를 입금하려고 하면 예외를 발생시킴
raise BankError('{}원 입금 불가'.format(money))
self.balance += money #입금
# 출금기능
def withdraw(self, money):
if money <=0: #0원 이하를 출금하려고 하면 예외 발생시킴
raise BankError('{}원 출금 불가'. format(money))
if money > self.balance: #통장 잔액보다 큰 금액을 출금하려고 할 때 예외 발생시킴
raise BankError('잔액부족')
self.balance -= money #출금
return money
# 이체 기능
def transfer(self, your_acc, money): #상대방 계좌, 이체할 금액
your_acc.deposit(self.withdraw(money))
# 조회 기능
def inquiry(self):
print('계좌번호 : {}'.format(self.acc_no))
print('통장잔액 : {}원'.format(self.balance))
# 309page 4가지 상황 다 해보기
# 정상 상황
me = BankAccount('012-34-56789', 50000)
you = BankAccount('987-65-43210', 50000)
try:
me.transfer(you, 5000)
except BankError as e:
print(e)
finally: #무조건 출력
me.inquiry()
you.inquiry()
============실행결과===============
계좌번호 : 012-34-56789
통장잔액 : 45000원
계좌번호 : 987-65-43210
통장잔액 : 55000원
## 일반 웹 페이지 정보 가져오기 ##
import requests #http 요청을 수행해서 웹 페이지의 소스코드를 가져오는 라이브러리
url = 'https://www.naver.com' #가지고 올 웹페이지 주소
response = requests.get(url) #결과를 response변수에 담는다.
print(response.text) #결과를 텍스트로 보겠다
print('응답코드 : {}'.format(response.status_code)) #응답 코드 출력
============실행결과===============
<!doctype html> <html lang="ko" data-dark="false"> <head> <meta charset="utf-8"> <title>NAVER</title> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=1190"> <meta name="apple-mobile-web-app-title" content="NAVER"/> <meta name="robots" content="index,nofollow"/> <meta name="description" content="네이버 메인에서 다양한 정보와 유용한 컨텐츠를 만나 보세요"/> <meta property="og:title" content="네이버"> <meta property="og:url" content="https://www.naver.com/"> <meta property="og:image" content="https://s.pstatic.net/static/www/mobile/edit/2016/0705/mobile_212852414260.png"> <meta property="og:description" content="네이버 메인에서 다양한 정보와 유용한 컨텐츠를 만나 보세요"/> <meta name="twitter:card" content="summary"> <meta name="twitter:title" content=""> <meta name="twitter:url" content="https://www.naver.com/"> <meta name="twitter:image" content="https://s.pstatic.net/static/www/mobile/edit/2016/0705/mobile_212852414260.png"> <meta name="twitter:description" content="네이버 메인에서 다양한 정보와 유용한 컨텐츠를 만나 보세요"/> <link rel="stylesheet" href="https://pm.pstatic.net/dist/css/nmain.20220818.css"> <link rel="stylesheet" href="https://ssl.pstatic.net/sstatic/search/pc/css/sp_autocomplete_220526.css"> <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico?1"/> <link rel="apple-touch-icon" sizes="114x114" href="https://s.pstatic.net/static/www/u/2014/0328/mma_204243574.png"/> <link rel="apple-touch-icon" href="https://s.pstatic.net/static/www/u/2014/0328/mma_20432863.png"/> <script>window.nmain=window.nmain||{},window.nmain.supportFlicking=!1;var nsc="navertop.v4",ua=navigator.userAgent,useIeJSFlag="1";window.nmain.isIE="0"===useIeJSFlag,document.getElementsByTagName("html")[0].setAttribute("data-useragent",ua),window.nmain.isIE&&(Object.create=function(n){function e(){}return e.prototype=n,new e})</script> <script>var darkmode= false;window.naver_corp_da=window.naver_corp_da||{main:{}},window.naver_corp_da.main=window.naver_corp_da.main||{},window.naver_corp_da.main.darkmode=darkmode,window.gladsdk=window.gladsdk||{cmd:[]},window.gladsdk.cmd.push((function(){window.gladsdk.setHostMeta("theme",darkmode?"dark":"light")})),window.ndpsdk=window.ndpsdk||{cmd:[],polyfill:{cmd:[]}},window.ndpsdk.cmd.push((function(){window.ndpsdk.setHostMeta("theme",darkmode?"dark":"light")}))</script> <script async src="https://ssl.pstatic.net/tveta/libs/glad/prod/gfp-core.js"></script> <script async src="https://ssl.pstatic.net/tveta/libs/ndpsdk/prod/ndp-loader.js"></script> <script> window.nmain.gv = { isLogin: false,
...
응답코드 : 200
## 검색 결과 웹페이지 정보 가져오기 ##
import requests
url = 'https://search.naver.com/search.naver'
param = {'query':'파이썬'} #param이라는 딕셔너리 생성 #검색어가 파이썬
response = requests.get(url, params=param)
print(response.text)
'Python > 개념정리' 카테고리의 다른 글
python_16일차 (0) | 2022.08.27 |
---|---|
python_15일차 (1) | 2022.08.24 |
python_13일차 (0) | 2022.08.17 |
python_12일차 (0) | 2022.08.12 |
python_11일차 (0) | 2022.08.10 |
Comments