查找列表的最大/最小值时管理空列表/无效输入(Python)

Jon*_*ter 31 python error-handling list max min

我在Python中使用max(list)和找到列表的最大值和最小值min(list).但是,我想知道如何管理空列表.

例如,如果列表是一个空列表[],程序会引发'ValueError: min() arg is an empty sequence'但我想知道如何使程序只是打印'empty list or invalid input'而不是崩溃.如何管理这些错误?

Ale*_*ley 64

在Python 3.4中,default关键字参数已添加到minmax函数中.如果函数用于空列表(或其他可迭代对象),则允许返回您选择的值.例如:

>>> min([], default='no elements')
'no elements'

>>> max((), default=999)
999

>>> max([1, 7, 3], default=999) # 999 is not returned unless iterable is empty
7
Run Code Online (Sandbox Code Playgroud)

如果default未给出关键字,ValueError则会引发a .


Cur*_*lop 44

在早期版本的Python中指定默认值:

max(lst or [0])
max(lst or ['empty list'])
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,这对空迭代器不起作用. (8认同)
  • 非常好.对于好奇,这是有效的,因为空列表在Python中是假的...所以`[1,2,3]或'别的'`是[1,2,3],但是`[]或'别的'`是'别的'.如果后者是单项列表,`min()`将始终返回其唯一项. (5认同)

Qrt*_*rtn 11

抓住并处理异常.

try:
    print(min(l), max(l))
except (ValueError, TypeError):
    print('empty list or invalid input')
Run Code Online (Sandbox Code Playgroud)

ValueError用空序列引发.TypeError当序列包含不可共享的类型时引发.

  • 有一个副作用:如果堆栈上发生的某些其他错误恰好属于同一类型,那么它也会被捕获.这种不准确性是异常处理的主要批评来源.在这种特殊情况下,这可能不太重要. (3认同)