【发布时间】:2014-11-05 01:41:27
【问题描述】:
我正在研究 Python 中的一个经典学生问题,在一系列条目中查找最大值和最小值。通常,我想通过将所有有效的用户条目放在一个列表中来做到这一点,但是我们应该一个一个地评估每个条目,因为它来自用户。 (在这个类中,我们在列表之前覆盖循环。)
由于我没有使用列表,因此我不愿将变量声明为 None,然后评估“最大为 None 或最大
所以问题来了:这是对 try/except 的有效使用吗?它比注释的替代方案更不pythonic吗? (当然,最 Python 的方式是 min([list]) 但我在这里。)
#smallest = None
while True:
num = raw_input("Enter a number: ")
if num == "done" : break
try:
num = int(num)
except:
print 'Invalid input'
continue
try:
smallest = min(num,smallest)
except NameError:
smallest = num
# if num < smallest or smallest is None:
# smallest = num
print "Minimum is", smallest
【问题讨论】:
-
规则:异常应该是exceptional,不要覆盖编码;只有少数情况下使用它们比首先执行检查更适用(并且请在任何使用点之前绑定局部变量!)
-
首先,如果您在谈论“声明变量”,这通常表明您没有正确考虑 Python。从技术上讲,您可以说变量是通过在当前编译单元中的任何地方使用的名称来“声明”的,但这更多的是误导而不是有用。
-
@user2864740:在 this 的情况下,这至少是有争议的,但总的来说,这根本不是真的,它直接违背了 Python 中的基本 EAFP 原则。
-
@abarnert 我认为 EAFP(尤其是带有字典键的)更像是一种可接受的特殊情况,就像试图将字符串强制转换为整数一样。 (在许多情况下,无效输入确实属于“异常”的情况。)同样,它不应该覆盖代码。
-
“例外应该是处理例外情况” - 应该有人告诉
StopIteration和GeneratorExit。
标签: python nonetype try-except