TypeError
unsupported operand type(s) for ‘연산자’
TypeError: unsupported operand type(s) for &: ‘str’ and ‘str’
str 타입끼리의 & 연산자를 지원하지 않는다.
상황
i가 a부터 z까지의 영어 소문자가 아닐 경우 경고 메시지를 출력하고 싶었다.
처음에 생각없이 조건문에 i != string.ascii_lowercase를 줬더니 오류 발생해서 아래 코드로 고친 것이다.
문제 코드
for i in S:
if (i >= "a" && i <= "z"): # 여기서 에러 발생
print("소문자 영어만 입력 가능합니다.")
해결
for i in S:
if (not(i.islower())):
print("소문자 영어만 입력 가능합니다.")
문자를 검사할 수 있는 메소드 중 소문자인지 검사해주는 islower 메소드를 사용했다.
cannot unpack non-iterable 타입 object
TypeError: cannot unpack non-iterable int object
비문자적 정수형 객체를 압축해제 할 수 없다.
상황
여러 개의 변수를 각각 초기화 하기에는 내용이 너무 길어질 것 같아서 한 줄에 초기화를 하려고 했다가 오류가 발생했다.
문제 코드
temp_count, count1, count2 = 0
해결
# 개별 초기화
temp_count = 0
count1 = 0
count2 = 0
# 통합 초기화
temp_count = count1 = count2 = 0
list indices must be integers or slices, not str
TypeError: list indices must be integers or slices, not str
리스트의 인덱스는 문자열이 아니라 정수여야 한다.
문제 코드
for i in word:
for j in array1:
if i == j:
word[i] = array2[j]
break
for j in array2:
if i == j:
word[i] = array1[j]
break
해결
for i in word:
for j in range(0, 12):
if i == array1[j]:
word[i] = array2[j]
break
elif i == array2[j]:
word[i] = array1[j]
break
not enough arguments for format string
TypeError : not arguments for format string
arguments(앞의 독립 변수, 원소 등)와 뒤의 string 개수가 다르다.
상황
여러 개의 값을 원하는 포맷으로 출력하고 싶었다.
문제 코드
print("%d-%d-%d" % int(d) % int(m) % int(y))
해결
print("%d-%d-%d" % (int(d), int(m), int(y)))
여러 개를 포맷에 맞게 출력하고 싶다면, 괄호로 묶어줘야 한다.
ValueError
invalid literal for int() with base 문제가-되는-행
ValueError: invalid literal for int() with base 10: ‘B’
‘B’를 int형으로 형변환할 수 없다.
상황
i가 a부터 z까지의 영어 소문자가 아닐 경우 경고 메시지를 출력하고 싶었다.
아스키코드로 변환하여 int로 형변환한 문자와 비교하면 오류가 발생하지 않을 줄 알았는데 아니었다.
문제 코드
for i in S:
if (int(i) < 97 & int(i) > 122):
print("소문자 영어만 입력 가능합니다.")
해결
for i in S:
if (not(i.islower())):
print("소문자 영어만 입력 가능합니다.")
문자를 검사할 수 있는 메소드 중 소문자인지 검사해주는 islower 메소드를 사용했다.