Hacker rank Challenge/python

30 Days Challenge 8일차 & python Error 정리

반응형

 

 

# Enter your code here. Read input from STDIN. Print output to STDOUT
phone = {}
inputn = []

t = int(input())

i = 0
while i < t:
    a, b = list(map(str, input().rstrip().split()))
    phone[a] = b
    i += 1

for _ in range(0, t):
    inputn.append(str(input()))



for outputn in inputn:
    if outputn in phone:
        print("{}={}".format(outputn, str(phone[outputn])))
    else:
        print('Not found')






 

이렇게 작성하여 실행은 되었으나, 처음에 입력받은 t가 너무 값이 클 경우에는 error가 생겼다.

 

알고리즘 자체는 틀리지 않았다. 이유를 알 수가 없어 여기저기 알아보았는데, 대부분이 사람들이 작성한 코드가 전부 같은 error나 나왔다. 그래서 한 외국사이트에서 그 이유를 찾을 수 있었다.

 

 

문제를 자세히 읽어보면 n과 number of query 모두 10 ^ 5의 제약 조건이 있다. 

 

N=int(input())
phoneBook={}

for _ in range(N):
    name,contact=input().split()
    phoneBook[name]=contact

try:
    while(True):
        check=str(input())
        if check in phoneBook:
            print(check+"="+phoneBook[check])
        else:
            print('Not found')

except(EOFError):
    pass

 

이렇게 작성하면 해결 할 수 있다고 한다. try와 except를 사용하여 해결 할 수 있다고 한다.

 

try except문은 에러를 에러를 제어할 수 있는 예외처리 함수라고 한다.

 

N으로 입력받은 값만큼 휴대폰에 저장할 사람 이름과 그 사람의 전화번호를 저장할 수 있다.

name이 사람 이름 contact가 전화번호이다. 

 

phoneBook이라는 Dictionary에 name : contact 로 저장한다.

 

while(True)라고 하면 그냥 무한반복이다. 

check로 입력받은 문자가 phoneBook이라는 Dictionary에 포함되어 있다면

그것을 출력하는 것이다.

 

만약 내가 홍길동 12345678을 입력했고

check에 홍길동을 입력했다면

홍길동=12345678로 출력된다.

 

만약 내가 저장한 홍길동이 아니라 저장하지 않은 이순신을 입력했다면

Not found가 출력된다.

 

except(EOFError):
    pass

 

를 사용함으로써 에러가 뜰경우 그냥 pass하도록 하였다. 

 

 

blog.naver.com/dnjswls23/222166545874

 

파이썬(Python) 공부[12] - 예외처리 (try ~ except ~ finally), 예외 종류 (Exception)

예외처리파이썬(Python)에서 프로그램 에러가 발생했을 때, 에러를 핸들링하는 기능으로 try..except 문을...

blog.naver.com

이 사이트에서 에러의 종류들을 살펴볼 수 있었다. 위 사이트에서 알게된 내용은 다음과 같다.

 

베이스 클래스( 주로 다른 예외의 베이스 클래스로 사용)
BaseException 모든 내장 예외의 베이스 클래스입니다. 사용자 정의 클래스에 의해 직접 상속되는 것이 아닙니다 (그런 목적이라면 Exception 사용). 이 클래스의 인스턴스에 대해 str() 이 호출되면, 인스턴스로 전달된 인자의 표현을 돌려줍니다. 인자가 없는 경우 빈 문자열을 돌려줍니다
Exception 모든 시스템 종료 외의 내장 예외는 이 클래스에서 파생됩니다. 모든 사용자 정의 예외도 이 클래스에서 파생되어야 합니다.
ArithmeticError 다양한 산술 에러가 일으키는 내장 예외들의 베이스 클래스
BufferError 버퍼 관련 연산을 수행할 수 없을 때 발생합니다.
LooupError 매핑 또는 시퀀스에 사용된 키나 인덱스가 잘못되었을 때 발생하는 예외

 

구체적인 예외 (일반적으로 직접 일으키는데 사용)
AssertionError assert 문이 실패할 때 발생
AttributeError 어트리뷰트(Attribute) 참조나 대입이 실패할 때 발생
EOFError input() 함수가 데이터를 읽지 못한 상태에서 EOF (end-of-file) 조건을 만날 때 발생
GeneratorExit 제너레이터 또는 코루틴(coroutine)이 닫힐 때 발생
ImportError import 문이 모듈을 로드한 데 문제가 있을 때 발생
ModuleNotFoundError ImportError 의 서브 클래스로, 모듈을 찾을 수 없을 때 발생
IndexError 시퀀스 인덱스가 범위를 벗어날 때 발생
KeyError 매핑(딕셔너리) 키가 기존 키 집합에서 발견되지 않을 때 발생
KeyboardInterrupt 사용자가 인터럽트 키(일반적으로 Control-C 또는 Delete)를 누를때 발생
MemoryError 작업에 메모리가 부족하지만, 상황이 여전히 복구될 수 있는 경우 발생
NameError 지역 또는 전역 이름을 찾을 수 없을 때 발생
NotImplementedError RuntimeError에서 파생된 예외로, 사용자 정의 베이스 클래스에서 파생 클래스가 재정의하도록 요구하는 추상 메서드나, 클래스가 개발되는 도중에 실제 구현이 추가될 필요가 있음을 나타낼 때 발생
OSError 시스템 함수가 시스템 관련 에러를 돌려줄 때 발생
OverflowError 산술 연산의 결과가 너무 커서 표현할 수 없을 때 발생
RecursionError RuntimeError에서 파생된 예외로, 인터프리터가 최대 재귀 깊이를 초과하였음을 감지할 때 발생
ReferenceError weakref.proxy() 함수가 만든 약한 참조 프록시가 이미 가비지 수집된 참조 대상의 어트리뷰트를 엑세스하는 데 사용될 때 발생
RuntimeError 다른 범주에 속하지 않는 에러가 감지될 때 발생
SyntaxError 파서가 문법 오류를 만날 때 발생
IndentationError 잘못된 들여쓰기와 관련된 문법 오류의 베이스 클래스
TabError 들여쓰기가 일관성없는 탭과 스페이스 사용을 포함하는 경우 발생
SystemError 인터프리터가 내부 에러를 발견했지만, 상황이 심각해 보이지 않을 때 발생
SystemExit sys.exit() 함수가 일으키는 예외
TypeError 연산이나 함수가 부적절한 형의 객체에 적용될 때 발생
UnboundLocalError 함수나 메서드에서 지역 변수를 참조하지만, 해당 변수에 값이 연결되지 않으면 발생
UnicodeError 유니코드 관련 인코딩 또는 디코딩 에러가 일어날 때 발생
UnicodeEncodeError 인코딩 중에 유니코드 관련 에러가 일어나면 발생
UnicodeDecodeError 디코딩 중에 유니코드 관련 에러가 일어나면 발생
ValueError 연산이나 함수가 올바른 형이지만 부적절한 값을 가진 인자를 받았고, 상황이 IndexError 처럼 더 구체적인 예외로 설명되지 않는 경우 발생
ZeroDivisionError
나누기 또는 모듈로 연산의 두 번째 인자가 0일때 발생

 

 

'Hacker rank Challenge > python' 카테고리의 다른 글

30 Days Challenge 10일차  (0) 2021.01.26
30 Days Challenge 9일차  (0) 2021.01.25
30 Days Chellenge 7일차  (0) 2021.01.23
30 Days Chellenge 6일차  (0) 2021.01.22
30 Days Challenge 5일차  (0) 2021.01.21