查找列表的最大/最小值时管理空列表/无效输入(Python)
我在Python中使用查找列表的最大/最小值时管理空列表/无效输入(Python),python,list,error-handling,max,min,Python,List,Error Handling,Max,Min,我在Python中使用max(list)和min(list)查找列表的最大值和最小值。然而,我想知道如何管理空列表 例如,如果列表是一个空列表,[],程序将引发'ValueError:min()arg是一个空序列',但我想知道如何使程序只打印'empty list or invalid input',而不只是崩溃。如何管理这些错误?捕获并处理异常 try: print(min(l), max(l)) except (ValueError, TypeError): print('e
max(list)
和min(list)
查找列表的最大值和最小值。然而,我想知道如何管理空列表
例如,如果列表是一个空列表,
[]
,程序将引发'ValueError:min()arg是一个空序列'
,但我想知道如何使程序只打印'empty list or invalid input'
,而不只是崩溃。如何管理这些错误?捕获并处理异常
try:
print(min(l), max(l))
except (ValueError, TypeError):
print('empty list or invalid input')
ValueError
以空序列引发<当序列包含无序类型时,会引发代码>类型错误。在Python 3.4中,在min
和max
函数中添加了default
关键字参数。如果函数用于空列表(或其他iterable对象),则允许返回您选择的值。例如:
>>> 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
如果未给出
default
关键字,则会引发ValueError
。在早期版本的Python中指定默认值:
max(lst or [0])
max(lst or ['empty list'])
在python中,这是最好的方法(异常很便宜):有一个副作用:如果堆栈的较低位置发生了某种类型相同的错误,它也会被捕获。这种不准确是批评异常处理的主要原因。在这种特殊情况下,这可能没什么关系。@ivan_pozdeev你的评论对我来说没有意义。异常处理仅表示某个操作应该成功,如果指定错误类型列表的操作失败,则选择其他处理。关于这个命题,没有任何内容表明异常的原因必须是
try
部分中原始代码的透明部分。如果堆栈上的某个东西,如一个奇怪的内存错误或错误编译的扩展模块或某物,导致了<代码> ValueError < /C> >,它不会改变或破坏任何异常处理。它只意味着程序员必须考虑更大范围的可能失败的操作,或者权衡使用特殊逻辑明确控制此类故障与冒着假设此类故障在某一天造成实际问题之前不太可能关心的风险之间的权衡。异常处理将这个权衡决定交到工程师手中,这是它的归属。非常好。出于好奇,这是可行的,因为在Python中空列表是错误的。。。所以[1,2,3]或“其他东西”是[1,2,3],但[]或“其他东西”
是“其他东西”。如果后者是一个单项目列表,min()
将始终返回其唯一的项目。不幸的是,这不适用于空迭代器。