Python——为什么是';除了VauleError';循环时线路不中断?
我正在windows系统中使用Ipython笔记本。python版本是2.7 df是一个数据帧,只包含4个超出该负载范围的值。据我所知,“except VauleError”将只执行4次。 但为什么下面的代码会继续执行“except ValueError”行和“print amp_p,amp_n”无休止地执行?我不知道为什么,但最后我在“print amp_p,amp_n”后面加上了“break”,然后它就开始工作了。据我所知,“except ValueError”应该能够中断while循环Python——为什么是';除了VauleError';循环时线路不中断?,python,Python,我正在windows系统中使用Ipython笔记本。python版本是2.7 df是一个数据帧,只包含4个超出该负载范围的值。据我所知,“except VauleError”将只执行4次。 但为什么下面的代码会继续执行“except ValueError”行和“print amp_p,amp_n”无休止地执行?我不知道为什么,但最后我在“print amp_p,amp_n”后面加上了“break”,然后它就开始工作了。据我所知,“except ValueError”应该能够中断while循环 i
import numpy as np
from scipy import interpolate
import PitchBearing_wohler as pw
load = np.linspace(-8000,8000,num=10,endpoint=True)
result=pd.read_csv('result.csv',header=None)
result[0]
SCF=3.
D=0.
srf=1
f=interpolate.interp1d(load,result[0])
for col in df.columns:
for ind in df.index:
cycle=df[col][ind]
if cycle==0.:
pass
else:
amp_p=float(col)/2.+float(ind)
amp_n=float(ind)-float(col)/2.
while True:
try:
range_new=f(amp_p)-f(amp_n)
mean_new=(f(amp_p)+f(amp_n))/2
break
except ValueError:
print amp_p,amp_n,cycle
#break # Added after I found the while loop won't break
这是因为您的
try-catch
块仍在while
循环的范围内。您应该将while
循环放在try
块内。这是有意义的,因为在捕获到异常之后,程序将继续运行,直到except块的末尾,然后在try except块之后继续运行剩余的行,直到except块的末尾(在您的情况下,不再有了)并最终检查while条件中的条件是否保持为True。在您的情况下,while循环的条件保持为True,因此循环继续
while True:
try:
range_new=f(amp_p)-f(amp_n)
mean_new=(f(amp_p)+f(amp_n))/2
break
except ValueError:
print amp_p,amp_n,cycle
您似乎误解了一点,即您认为异常应该中断while循环,而异常实际上不会中断while循环或任何循环。如果异常发生且未被捕获,则会中断程序的while循环,而不是while循环或任何其他循环
如果异常发生并被捕获,程序将在捕获异常的except块中继续
在任何一种情况下,它都不会中断while循环,除非while循环在try块中并且异常发生在try块中:
try:
while (x):
#exception occurs here
except:
但即使在上述情况下,严格地说,我们的理解仍然是异常不会中断while循环。它只是中断程序的路径并转到最近的except块。感谢您的解释。我想我现在知道了,因为如果没有异常块的中断,while循环将由于while循环不在DataFrame中的值上移动,因此,当添加break时,程序可以从while循环跳转到For循环,然后再跳转到下一个值。我只是按照我搜索到的一些教程进行操作,但不完全理解,因此会犯这样的错误。谢谢。