我有一个关于块以外的好奇问题,尤其是最后:
:在第一个代码的第一个块中,最终可以正常工作,与此同时,第二个代码与第一个的最小不同,它总是会给您带来错误。
首先:
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!"
abra()
打开所有解决方案 - 谢谢
我相信您遇到的混乱来自第一个示例中的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!"
最终子句必须直接连接到try/try/def子句以使其工作。在第二个代码中,在try/deve和最后一个之间存在一个if/else。因此,结构是尝试/除外,如果/其他,最终是无效的。相比之下,首先,其他块是一个块,当异常未升高时执行,因此是try/deve的一部分 - 结构是try/exts/else/fine。