오류

 

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 메소드를 사용했다.