파이썬 코드를 작성한 다음 에러가 없나 확인해보는데 다음과 같은 에러 메세지가 노출되는 것을 확인할 수 있었습니다.
ValueError: max() arg is an empty sequence
ValueError: min() arg is an empty sequence
이게 대체 왜 발생하는 에러인지 처음에는 알 수가 없어서 시간을 들여 하나하나 실행해보면서 확인해봤는데.. 원인을 알고 보니 간단한 문제였습니다.
우선 예제 코드를 보겠습니다.
a = [1, 2, 3, 4]
# https://redfox.tistory.com/
a.remove(max(a))
a.remove(min(a))
print(a)
>> [2, 3]
에러가 발생한 코드는 위와 같이 max()와 min() 명령을 통해 최댓값과 최솟값을 찾은 다음, remove 명령을 통해서 리스트 요소를 제거하는 작업을 수행하는 코드였습니다.
리스트에 포함된 모든 숫자들을 가지고 평균치를 내면 정말 편하겠지만, 그냥 평균을 내는 것보다는 가중평균을 계산하는 것이 보다 정확한 평균치를 알아볼 수 있다고 생각하기 때문에 각각 최대치와 최소치를 일부 제거한 다음 평균을 계산하게 했습니다.
그리고 이게 바로 ValueError가 발생하게 되는 원인이었는데요.
예시 코드에는 리스트가 정해져 있지만, 실제 사용하는 코드에서는 특정 작업을 수행한 결과값들을 리스트 형태로 받아온 다음 위와 비슷한 과정을 진행하게 됩니다.
즉, 작업 공정마다 리스트 요소들이 달라진다는 것이죠.
해당 에러가 발생하는 경우는 다음과 같습니다.
a = [1]
# https://redfox.tistory.com/
a.remove(max(a))
a.remove(min(a))
print(a)
>> ValueError: min() arg is an empty sequence
a = []
# https://redfox.tistory.com/
a.remove(max(a))
a.remove(min(a))
print(a)
>> ValueError: max() arg is an empty sequence
위와 같이 주어진 값들 중에서 최대치를 찾는 max() 명령어, 그리고 최소치를 찾는 min() 명령어를 수행하려고 할 때, 수치를 비교할 수 있는 데이터가 존재하지 않는 빈 리스트를 제공해줬을 때 ValueError가 발생하는 것이었습니다.
이런 에러를 예방하기 위해서는 리스트가 빈 리스트인지 확인하거나, len() 명령어를 통해 리스트 요소의 개수를 확인한 다음 작업을 수행하게 하니 코드가 아무 문없이 정상 작동하는 것을 확인할 수 있었습니다.
최근댓글