이 자료는 네이버 부스트 코스에서 제공하는 자료로 만들어졌습니다.
왠지 모르면 손해인 함수들에 대하여 알아볼 것이다.
우리는 프로그램을 사용할 때 예상치 못한 오류들을 마주하게 된다! ㄷㄷ
예상 가능한 예외는 if 문을 이용하지만
불가능한 예외는 try except을 이용한다.
이러한 경우 우리는 예외 처리를 꼭 해주는 것이다.!
- Exception Handling
try 에 예외 발생 가능 코드를 적는 이유는 우선 실행해보고
잘못됐을 때 예외 발생 대응 코드를 사용하는 것이다.
아래에는 예시이다.
이미 기본적으로 제공하는 에러들을 사용할수도 있다.
마지막에 이와 같은 방식을 사용한다고 하면 모르는 에러를 출력해준다고 한다.
하지만 잘 권장하지는 않는다고 한다. 이유는 다른 사용자가 어디서 에러가 발생했는지 알수 없다고 한다.
아래와 같은 예시도 존재한다!
그렇게 중요하지는 않지만 이런 복잡한 구조는 교수님은 잘 선호하지 않는다고 한다.
finally 구문은 상관없이 그냥 나온다고 한다.
raise 구문
필요에 따라 강제로 excption을 발생하는 것이다.
이유는 사용자가 잘못된 입력을 했을때 알려줘야하기 때문이다.
이러한 이유는 사전에 방지하는 목적으로 많이 사용한다고 한다.
raise를 이용해 중단을 해주는 것이다.
assert구문
특정 조건에 만족하지 않을 경우 예외 발생을 하는 것이다.
assert 구문에 조건을 만족하지 않으면 False를 출력해준다고 한다.
- File Handling
이 개념은 필수적으로 알아야한다.!!!!
ai 개발자가 되기 위해!!!!
파일을 사용할 때 파일에는 두종류가 있다. 그 내용은 아래와 같다.
파일의 형태를 확인해보는 방법으로는 메모장에 붙여 넣어보면 알수 있다.
이제 파일 처리를 위한 방법을 알아보자.
파이썬에서는 파일을 처리하기 위해 open 이라는 키워드를 사용한다.
사용되는 모드로는 r w a 가 있다.
f = open을 사용하게 된다면 주소를 가져오고 read 함수를 사용해야 실행이 되는 것이다.
read() 함수의 경우 파일 내에 있는 내용을 문자열로 가져오게 된다.
그리고 f.close를 사용해서 파일을 닫아주게 된다.
이러한 함수는 with 과 많이 사용 되는데 알아서 close 를 해주게 된다.
다음은 readlines 인데 이 함수의 경우에는 \n을 기준으로 list로 반환을 해주게 된다.
한줄씩 읽어주는 것도 있다. readlines 의 경우 한번에 메모리에 올리지만 readline의 경우에는 한줄씩 메모리에 올리는 것이다.
여기서 encoding 이라는 내용이 있는데
encoding은 우리가 어떤 문자나 글자를 컴퓨터에 저장하게 되는 데 이러한 표준을 말하는 것이다. 동양권에서는 utf8을 많이 사용한다고 한다. cp949도 사용하는 곳이 있다고 한다.
w는 쓰기 a는 추가모드이다. 이어서 쓴다고 생각하면 쉽다.
write 함수는 쓰는 곳에 사용하는 함수이다.
우리가 diretory를 생성할 수도 있다.
mkdir을 사용한다. 여기서 try except를 사용해서 이미 존재하면 만들지 말라고도 할수 있다!ㄷㄷ
path 를 사용해서 하는 방법도 있다.
join 구문도 있는데 현재 폴더를 기준(상대경로이다) 으로 abc 폴더 밑에 sunghucl.txt를 넣으라는 것이다.
그후 shutil.copy 함수를 사용해서 파일을 복사한다.
최근에는 pathlib 을 많이 사용한다고 한다.
이러한 것에 장점은 더 편하다? 는 것이다.
이건 알아서 해보길...
다음은 우리가 배운걸 활용한 log 파일 생성법이다.
1) 디렉토리 있는지 없는지 확인
2) 파일 있으면 실행
우리의 로그를 기록하는 것이다. 난수와 시간을 기록한다.
- pickle
마지막은 파이썬의 객체에 대한 것인데
객체는 원래 메모리에 있어야 하는 놈이다. 우리가 파이썬을 실행할 때 메모리에 올라가게 된다.
이 메모리에 있는 것은 파이썬이 종료 되면 사라지게 된다. 하지만 우리는 종료되고도 사용하고 싶을 때가 있을 것이다.
이게 pickle이라한다. 영속화 한다는 것이다. 저장후 불러와서 사용한다는 것이다.
계산 결과 등 저장에 많이 사용한다고 한다.
위의 예시를 보게 된다면 파일을 열고 우리의 test 리스트를 dump 함수를 이용해 저장한다. wb
왼쪽의 문법으로 저장하고 오른쪽의 문법으로 다시 열어서 확인하는 것이다. rb
위의 예시는 저장된 값을 불러오는 방법이다.
- Logging Handling
우리가 많이 하는 게임들은
핵을 사용하는 유저들로 인하여 많은 피해를 보게 된다. 이거 어케 잡을까? 일단 기록부터 하는 것이다.
print 를 사용하는 방법도 있지만 이걸 기록에 남기는게 더 좋은 수 있다.
로그에는 레벨이 존재한다.
위와 같은 레벨이 존재한다.
하지만 우리는 이러한 로그를 레벨을 정해 기록하는 방법이 있다.
아래와 같은 레벨을 설정하면 warning 부터 실행을 하지만 레벨을 정하면 info 부터 정할 수 있다.
configparser 는 아래와 같은 특징을 지니게 된다.
아래의 함수를 보면 cfg 파일을 가져와 읽어주게 된다.
argparser - 실행 시점에
import argparse
parser = argparse.ArgumentParser(description='Sum two integers.')
parser.add_argument('-a', "--a_value", dest=”A_value", help="A integers", type=int)
parser.add_argument('-b', "--b_value", dest=”B_value", help="B integers", type=int)
args = parser.parse_args()
print(args)
print(args.a)
print(args.b)
print(args.a + args.b)
def main():
parser = argparse.ArgumentParser(description='PyTorch MNIST Example')
parser.add_argument('--batch-size', type=int, default=64, metavar='N', help='input batch size for training (default:64)')
parser.add_argument('--test-batch-size', type=int, default=1000, metavar='N', help='input batch size for testing(default: 1000)')
parser.add_argument('--epochs', type=int, default=10, metavar='N', help='number of epochs to train (default: 10)')
parser.add_argument('--lr', type=float, default=0.01, metavar='LR', help='learning rate (default: 0.01)')
parser.add_argument('--momentum', type=float, default=0.5, metavar='M', help='SGD momentum (default: 0.5)')
parser.add_argument('--no-cuda', action='store_true', default=False, help='disables CUDA training')
parser.add_argument('--seed', type=int, default=1, metavar='S', help='random seed (default: 1)’)
parser.add_argument('--save-model', action='store_true', default=False, help='For Saving the current Model')
args = parser.parse_args()
if __name__ == '__main__':
main()
- logging 적용하기
'AI > python AI' 카테고리의 다른 글
python - Numerical Python - Numpy (0) | 2022.06.02 |
---|---|
python - data handling (0) | 2022.06.01 |
python - Module and Project (0) | 2022.06.01 |
python - Object Oriented Programming (객체 지향 프로그래밍) (0) | 2022.06.01 |
python - function passing arguments (0) | 2022.05.30 |