이 글은 제가 공부하다 정리할 필요를 느껴서 작성하는 글입니다. 잘못된 내용이 있다면 지적 부탁드립니다.
오류 메시지
SyntaxError: EOL while scanning string literal
원인
따옴표 ', " 의 짝이 맞지 않을 때
위 실행코드의 경우 print('hello world') 가 아닌 print('hello world) 로 따옴표 ' 가 한개 모자랍니다.
오류 메시지
IndentationError: expected an indented block
원인
if 문 다음줄에 들여쓰기(indentation)가 있어야 하는데, 들여쓰기가 모자랍니다.
오류 메시지
IndentationError: unindent does not match any outer indentation level
원인
첫번째 경우는 if 문 안에 두번째 하위줄인 print('22') 가 들여쓰기가 덜 되었습니다.
두번째 경우는 indentation 을 할 때 '공백 space' 와 '탭 tap' 를 혼용해서 썼기 때문에 에러가 났습니다. 첫번째 줄은 들여쓰기를 탭으로 하였고, 두번째 줄은 들여쓰기를 공백 문자인 space 키를 사용하여 했기 때문에 indentation 방법이 달라서 에러가 났습니다.
오류 메시지
IndentationError: unexpected indent
원인
if 문 안에 두번째 하위줄인 print('22') 가 들여쓰기가 더 되었습니다.
오류 메시지
SyntaxError: can't assign to keyword
원인
파이썬 예약어인 True 를 변수명으로 지정했습니다.
보통 boolean 자료형에서 True = 1, False = 0 으로 대응하기 때문에 "True = 1" 처럼 값 할당을 하려는 분이 있을까봐 예시에도 "True = 1" 이나 "Fasle = 0" 과 같은 코드를 작성하면 에러가 남을 보여드립니다.
True 나 False 외의 예약어는 and, break, class, continue, elif, except, finally, for, global, if, import, not, or, return, try, while 가 있고, 아래 이미지처럼
in 과 같은 경우 예약어이지만 오류 메시지는 다를 수 있습니다.
오류 메시지
SyntaxError: invalid syntax
원인
위 이미지처럼 파이썬 문법에 맞지 않는 경우입니다. 예약어 in 뒤에는 연산자가 아니라 리스트와 같은 변수나 enumerate() 같은 함수가 와야 합니다.
오류 메시지
SyntaxError: can't assign to literal
원인
변수이름은 숫자로 시작할 수 없습니다.
오류 메시지
NameError: name 'something' is not defined
원인
없는 변수를 호출하거나 변수 이름이 틀린 경우입니다. 선언한 변수 명은 'nane' 인데 print 문에서 'name' 변수를 호출하고 있습니다. 오류 메시지의 따옴표 안에 내가 호출한 변수명이 적혀 있습니다.
오류 메시지
ZeroDivisionError: division by zero
ZeroDivisionError: float division by zero
원인
숫자는 0으로 나눌 수 없습니다.
오류 메시지
RecursionError: maximum recursion depth exceeded
원인
호출하게 되면 함수 안에서 자기 자신을 재호출하는 재귀 함수 more_plus 함수를 선언했습니다. 재귀 함수의 종료 조건이 설정되지 않았기 때문에, 계속해서 자기 자신을 호출하다가 에러 메시지를 출력하며 종료되게 됩니다.
오류 메시지
AttributeError: 'list' object has no attribute 'value'
AttributeError: 'something' object has no attribute 'nothing'
원인
리스트에 없는 속성을 호출했습니다. value 는 딕셔너리에 있는 속성입니다. 호출한 속성의 이름에 오타를 냈어도 같은 에러메시지가 출력됩니다. 호출한 인스턴스 이름이 따옴표 안에 'something' 과 같이 들어있는 경우도 있습니다. 이 경우는 호출한 인스턴스 안에 두번째 따옴표 안에 적혀있는 내가 호출한 속성인 'nothing' 이 없는 경우입니다.
오류 메시지
Attribute Error: module 'numpy' has no attribute 'addition'
원인
numpy 모듈에 없는 속성인 addition 을 호출했습니다. 호출한 속성의 이름에 오타를 냈어도 같은 오류 메시지가 출력됩니다.
오류 메시지
ValueError: invalid literal for int() with base 10: 'hello'
원인
함수 안에 실행인자를 잘못 입력한 경우입니다. int() 함수 안에 함수 작성자가 의도하지 않은 변수인 문자열 'hello' 가 입력되었습니다. int() 함수는 숫자로 구성된 '2019' 같은 문자열을 입력받아 정수형 자료형으로 변경해주는 함수인데, 알파벳을 포함하는 문자열을 넣었기 때문에 에러가 발생했습니다.
이 외에도 함수 작성자가 의도하지 않은 실행인자를 넣을 경우 ValueError 가 발생할 수 있습니다.
오류 메시지
TypeError: bad operand type for abs(): 'str'
원인
절대값을 반환하는 함수 abs() 는 문자열 자료형 'str' 을 입력으로 받을 수 없습니다. 이런식으로 함수의 작성자가 의도하지 않은 자료형이 들어갈 경우 'TypeError' 가 발생합니다.
오류 메시지
TypeError: 'in <string>' requires string as left operand, not int
TypeError: argument of type 'int' is not iterable
원인
정상적으로 작동하는 코드와 함께 적어두었습니다. 첫번째 에러는 'in <stirng>' 문장 형태에선 'in' 앞에 'str' 자료형이 와야 하는데 'int' 가 입력된 경우입니다. 두번째 에러는 'int' 자료형은 '멤버를 하나씩 반환할 수 있는 오브젝트' 를 의미하는 iterable 한 자료형이 아닙니다. in 뒤에는 iterable 한 자료형이 위치해야 합니다. 리스트나 딕셔너리, range() 함수 반환 값인 range 클래스 등은 각각 엘레멘트를 한개씩 셀 수 있다고 생각하면 쉬울 것 같습니다.
오류 메시지
TypeError: abs() takes exactly one argument (0 given)
TypeError: abs() takes exactly one argument (2 given)
TypeError: Required argument 'number' (pos 1) not found
TypeError: max expected 1 arguments, got 0
원인
실행인자 갯수를 잘못 입력한 경우입니다.
첫번째 에러는 입력값의 절대값을 반환하는 함수인 abs() 는 1개의 실행인자를 입력받아야 하는데, 위 코드는 실행인자를 0개(0 given) 받았습니다. 실행인자 갯수가 잘못 입력되면 '0 given' 부분의 숫자가 경우에 따라 다르게 출력될 수 있습니다.
두번째 에러는 abs() 함수에 실행인자를 2개 입력한 경우입니다. 첫번째와 같은 에러코드가 출력되지만 마지막의 '2 given' 이 다르게 출력되었습니다.
세번째는 입력값의 반올림값을 반환하는 함수인 round() 함수에 실행인자의 갯수가 잘못 입력된 경우입니다.
네번째는 입력된 값들 중 최대값을 반환하는 함수인 max() 함수에 실행인자의 갯수가 잘못 입력된 경우입니다.
위와 같이 모두 동일하게 실행인자 갯수가 잘못 입력된 경우이지만 'TypeError: ' 부분을 제외하곤 자세한 오류 메시지는 차이가 있음을 보입니다. 이는 함수의 작성자가 오류가 발생 했을때 출력될 오류 메시지를 설정 할때 다르게 기록했기 때문입니다.
오류 메시지
IndexError: list index out of range
원인
리스트의 index 범위를 초과한 경우입니다. 선언한 리스트 a 는 a[0], a[1] 총 2개의 index가 존재하는데 존재하지 않은 4번째 index를 호출했기 때문에 에러가 발생했습니다.
오류 메시지
KeyError: 'c'
원인
선언한 딕셔너리는 key 값으로 'b' 만 가지고 있는데 key 값으로 'c' 를 호출했습니다. 존재하지 않는 key 를 호출했기 때문에 에러가 발생했습니다.
오류 메시지
ImportError: No module named 'my_module'
원인
import 하고 하는 모듈 이름을 잘못 입력했거나, 해당 모듈이 존재하지 않는 경우입니다. 사용하고자 하는 모듈 설치는 구글에 'how to install 000 on windows10 python' 처럼 검색하여 자신의 사용환경에 맞게 설치하면 됩니다. 끝에 python 을 붙인 것은 모듈 이름이 다른 프로그램과 같아서 엉뚱한 것이 검색되는 경우를 방지하기 위해서 입니다.