我有一个奇怪的问题,除了Block,特别是最后:
在第一个代码块中,最终可以正常运行,同时在第二个代码中,与第一个代码完全不同,它总是会给你一个错误。
首先:
def askint():
while True:
try:
val = int(raw_input("Please enter an integer: "))
except:
print "Looks like you did not enter an integer!"
continue
else:
print 'Yep thats an integer!'
break
finally:
print "Finally, I executed!"
print val
第二
def Abra():
while True:
try:
v = int(raw_input('Geben Sie bitte einen Integer ein (1-9) : '))
except :
print 'Einen Integer bitte (1-9)'
continue
if v not in range(1,10):
print ' Einen Integer von 1-9'
continue
else:
print 'Gut gemacht'
break
finally:
print "Finally, I executed!"
阿布拉()
打开所有解决方案 - 谢谢
答案 0 :(得分:1)
我相信你得到的混乱来自第一个例子中的else
。
在“尝试/排除”阻止中,区域try
,except
,else
和finally
都有效。这可能会误导新程序员,因为else
与if
语句不同。
您可以在此处阅读:Python try-else
在第二个示例中,if
语句不合适,因为它应该在整个try/except/else/finally
块之外,或者正确缩进其中一个部分。
对于您的具体示例,您需要类似于此的内容:
def Abra():
while True:
try:
v = int(raw_input('Geben Sie bitte einen Integer ein (1-9) : '))
if v not in range(1,10):
print ' Einen Integer von 1-9'
continue
except :
print 'Einen Integer bitte (1-9)'
continue
else:
print 'Gut gemacht'
break
finally:
print "Finally, I executed!"
虽然,我可能会建议您删除else
以避免对自己造成混淆(但这是上面链接中更好讨论的论点):
def Abra():
while True:
try:
v = int(raw_input('Geben Sie bitte einen Integer ein (1-9) : '))
if v not in range(1,10):
print ' Einen Integer von 1-9'
continue
print 'Gut gemacht'
break
except :
print 'Einen Integer bitte (1-9)'
continue
finally:
print "Finally, I executed!"
答案 1 :(得分:0)
finally子句必须直接连接到try / except子句才能生效。在第二个代码块中,try / except和finally之间有一个if / else。因此,结构是try / except,if / else,最后,这是无效的。相反,在第一个中,else是一个块,它在异常未被引发时执行,因此是try / except的一部分 - 结构是try / except / else / finally。