Python-为什么除了VauleError'循环时线路不会断开?

时间:2016-03-27 15:19:13

标签: python

我在Windows系统中使用Ipython Notebook.python版本是2.7。

df是pandas DataFrame,只包含4个超出负载范围的值。据我所知,除了VauleError'只会被罚4次。 但是为什么下面的代码会继续执行除ValueError'之外的其他代码。线和'打印amp_p,amp_n'不休?我不知道为什么,但最后我添加了“打破”#39;在打印amp_p之后,amp_n'它然后工作。据我所知,除了ValueError'应该能够打破while循环。

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

2 个答案:

答案 0 :(得分:2)

这是因为您的try-catch块仍然在while循环的范围内。您应该将while循环放在try块中,而不是。

答案 1 :(得分:2)

这是有意义的,因为在捕获异常之后,程序将继续运行直到除块结束,然后继续运行剩余的行,同时在try-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循环或任何其他循环。

如果发生异常并且被捕获,程序将在其捕获异常的except块中继续。

在任何一种情况下,循环时都不会中断,除非你的while循环在try块中并且try块中发生了异常:

try:
    while (x):
        #exception occurs here
except:

但即使在上述情况下,严格来说,理解仍然是打破while循环。它只是打破程序的路径并转到最近的除了块。