Python 为什么';这个代码不会触发ValueError吗?
当“chunk_size”为零或大于“sequence”的长度时,我试图触发一个错误。当我用chunk_size为4、sequence等于“123”调用这个函数时,它不会抛出错误。我做错了什么Python 为什么';这个代码不会触发ValueError吗?,python,Python,当“chunk_size”为零或大于“sequence”的长度时,我试图触发一个错误。当我用chunk_size为4、sequence等于“123”调用这个函数时,它不会抛出错误。我做错了什么 def slices(sequence,chunk_size): position=0 mini_list=[] answer=[] while chunk_size<=len(sequence) and chunk_size>0: try:
def slices(sequence,chunk_size):
position=0
mini_list=[]
answer=[]
while chunk_size<=len(sequence) and chunk_size>0:
try:
for char in sequence:
if len(sequence[position:position+chunk_size])==chunk_size:
mini_seq = sequence[position:position+chunk_size]
for digit in mini_seq:
mini_list.append(int(digit))
answer.append(mini_list)
mini_list=[]
position+=1
return answer
break
except ValueError:
print "Oops! That was no valid number. Try again..."
print slices("012", 4)
def切片(序列、块大小):
位置=0
迷你列表=[]
答案=[]
而chunk_size0:
尝试:
对于按顺序排列的字符:
如果len(序列[位置:位置+块大小])==块大小:
最小顺序=顺序[位置:位置+块大小]
对于小序号中的数字:
小列表。追加(整数(数字))
答案.附加(小列表)
迷你列表=[]
位置+=1
回覆
打破
除值错误外:
打印“哦!这不是有效的数字。请重试…”
打印切片(“012”,4)
它不会抛出ValueError,因为您在while块中引发它,并且while块只有在块大小为<0
或>len(str)
的所需条件未满足时才被输入
因此,要更正此问题,请将引发错误的代码部分移出while
循环。事实上,您在中放置的条件while
是错误的,请将其转换为if
语句。另外,在return
语句之前加一个中断也没有任何意义
所以你的代码变成了
while True:
try:
if chunk_size<=len(sequence) and chunk_size>0:
for char in sequence:
if len(sequence[position:position+chunk_size])==chunk_size:
mini_seq = sequence[position:position+chunk_size]
for digit in mini_seq:
mini_list.append(int(digit))
answer.append(mini_list)
mini_list=[]
position+=1
return answer
else:
raise ValueError
except ValueError:
print "Oops! That was no valid number. Try again..."
为True时:
尝试:
如果块大小为0:
对于按顺序排列的字符:
如果len(序列[位置:位置+块大小])==块大小:
最小顺序=顺序[位置:位置+块大小]
对于小序号中的数字:
小列表。追加(整数(数字))
答案.附加(小列表)
迷你列表=[]
位置+=1
回覆
其他:
升值误差
除值错误外:
打印“哦!这不是有效的数字。请重试…”
此外,您可以不用引发异常本身,而不用引发错误来验证数据的格式是否正确,并通过简单的if-else块获得相同的结果:
while True:
if chunk_size<=len(sequence) and chunk_size>0:
for char in sequence:
if len(sequence[position:position+chunk_size])==chunk_size:
mini_seq = sequence[position:position+chunk_size]
for digit in mini_seq:
mini_list.append(int(digit))
answer.append(mini_list)
mini_list=[]
position+=1
return answer
else:
print "Oops! That was no valid number. Try again..."
为True时:
如果块大小为0:
对于按顺序排列的字符:
如果len(序列[位置:位置+块大小])==块大小:
最小顺序=顺序[位置:位置+块大小]
对于小序号中的数字:
小列表。追加(整数(数字))
答案.附加(小列表)
迷你列表=[]
位置+=1
回覆
其他:
打印“哦!这不是有效的数字。请重试…”
您认为代码的哪一部分应该抛出错误?如果您在列表中超出范围-您将得到一个索引器
而不是值错误
而且您永远不会到达的主体,因为块大小
永远不会小于或等于3。@Ankit Jaiswal-“而块大小0”应该抛出一个错误(我认为),因为它的计算结果为False。@Mu,以及所有:我刚刚意识到我是多么愚蠢。@user1473511如果我的答案有用,别忘了:)