如何解决即使期望块返回-1一次迭代,Python中是否有任何方法可以完成for循环的所有迭代?
def try():
for i in range(9):
try:
{body}
except:
return -1
根据我的理解,如果任何迭代均发生异常,则程序将退出循环并返回-1,而不完成整个循环。我希望程序可以完成循环的其余部分,即使任何迭代都发生异常。
有什么办法吗?
解决方法
您可以像这样:继续而不是返回:
[1,2,3,4,5]
1
[5,5]
2
[5,10,5]
3
[5,15,5]
4
[5,20,5]
5
[5,25]
,
xlist=[1,'THREE',5]
print(xlist)
for item in xlist:
try:
xlist[xlist.index(item)] = item / 5
except:
xlist[xlist.index(item)] = item
finally:
print(item)
print(xlist)
,
您可以为此目的使用def printList1(list,col,STR_FMT='{}',gap=1):
list = [STR_FMT.format(x).lstrip() for x in list]
FMT2 = '%%%ds%%s' % (max(len(x) for x in list)+gap)
print(''.join([FMT2 % (v,"" if (i+1) % col else "\n") for i,v in enumerate(list)]))
和def printList2(list,col=None,gap=2,uniform=True,ljust=True,STR_FMT="{}",MAX_CHARS=120,end='\n'):
list = [STR_FMT.format(x).strip() for x in list]
Lmax,valid,valid_prev,cp,c = [MAX_CHARS+1],None,1,max(col,1) if col else 1
LoL_prev,Lmax_prev = [],[]
while True:
LoL = [list[i::c] for i in range(c)]
Lmax = [max(len(x)+gap for x in L) for L in LoL] # Find max width of each column with gap width
if uniform: # Set each max column width to max across entire set.
Lmax = [max(Lmax) for m in Lmax]
valid_prev,valid = valid,sum(Lmax) <= MAX_CHARS
if (col and (valid or (c == 1))) or not MAX_CHARS: # If column and valid strlen or MAX_CHARS is empty
break
elif valid_prev and not valid_prev == valid: # If valid_prev exist
c = cp if valid_prev and not valid else c
LoL,Lmax = (LoL_prev,Lmax_prev) if valid_prev else (LoL,Lmax)
break
LoL_prev,Lmax_prev = LoL,Lmax
cp,c = c,(c + (+1 if valid else -1))
ljust = '-' if ljust else ''
FMT = ["%%%s%ds%s" % (ljust,max(Lmax) if uniform else m,end if i+1 == c else '') for i,m in enumerate(Lmax)]
outStr = ''.join([''.join([f % v for v,f in zip(L,FMT)]) for L in zip(*LoL)])
remStr = ''.join([f % v for v,f in zip(list[c * (len(list) // c):],FMT)])
print(outStr+(remStr+end if remStr else remStr),end='')
如果您希望在>>> foolist = ['exiv2-devel','mingw-libs','tcltk-demos','fcgi','netcdf','pdcurses-devel','msvcrt','gdal-grass','iconv','qgis-devel','qgis1.1','php_mapscript']
>>> printList2(foolist)
exiv2-devel mingw-libs tcltk-demos fcgi netcdf pdcurses-devel msvcrt
gdal-grass iconv qgis-devel qgis1.1 php_mapscript
>>> printList2(foolist,MAX_CHARS=48,uniform=False,gap=3)
exiv2-devel mingw-libs tcltk-demos
fcgi netcdf pdcurses-devel
msvcrt gdal-grass iconv
qgis-devel qgis1.1 php_mapscript
>>> printList2(foolist,col=2,gap=3)
exiv2-devel mingw-libs
tcltk-demos fcgi
netcdf pdcurses-devel
msvcrt gdal-grass
iconv qgis-devel
qgis1.1 php_mapscript
>>> printList2(foolist,ljust=False,gap=2)
exiv2-devel mingw-libs
tcltk-demos fcgi
netcdf pdcurses-devel
msvcrt gdal-grass
iconv qgis-devel
qgis1.1 php_mapscript
>>> printList2(foolist,col=10,gap=2)
exiv2-devel mingw-libs tcltk-demos
fcgi netcdf pdcurses-devel
msvcrt gdal-grass iconv
qgis-devel qgis1.1 php_mapscript
>>> from math import pi
>>> FloatList = [pi**(i+1) for i in range(32)]
>>> printList2(FloatList,STR_FMT="{:.5g},",col=7,ljust=False)
3.1416,9.8696,31.006,97.409,306.02,961.39,3020.3,9488.5,29809,93648,2.942e+05,9.2427e+05,2.9037e+06,9.1222e+06,2.8658e+07,9.0032e+07,2.8284e+08,8.8858e+08,2.7916e+09,8.77e+09,2.7552e+10,8.6556e+10,2.7192e+11,8.5427e+11,2.6838e+12,8.4313e+12,2.6488e+13,8.3214e+13,2.6142e+14,8.2129e+14,2.5802e+15,8.1058e+15,
块之后执行语句,请使用pass
如果要继续下一次迭代,请使用continue
例如:
try-except
如果您想pass
,则应使用continue
。
def try():
for i in range(9):
try:
{body}
except:
pass
print('execute')
由于print('execute')
之后没有要执行的语句,因此可以使用pass
,但是使用def try():
for i in range(9):
try:
{body}
except:
continue
不会改变逻辑。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。