我在try块中有一些代码,引发ValueError。我有一个例外块,可以捕获此ValueError并进行处理。完成此操作后,除块外,我不希望其他块捕获此ValueError。
在下面的代码中,在代码的稍后部分还有另一种tryexcept块,该ValueError也被第二个捕获。我该如何确保ValueError仅被第一个除外捕获,而第二个除外?
# Get features to plot
try: #First Try Block
raw_features_list_1 = fsobject_1.genFeature(gmm.FftClassifier.fft_features)
except ValueError: #First Except Block
pass
filtered_features_list_1 = np.array([row[0] for row in raw_features_list_1 if row is not None]).reshape(-1, 1)
try: #Second Try Block
raw_features_list_2 = fsobject_2.genFeature(gmm.FftClassifier.fft_features)
except ValueError: #Second Except Block
pass
print("I am here")
filtered_features_list_2 = np.array([row[0] for row in raw_features_list_2 if row is not None]).reshape(-1, 1)
上面的代码给了我以下结果:
I am here
NameError Traceback (most recent call last)
<ipython-input-16-ff0067cb5362> in <module>
11 pass
12 print("I am here")
---> 13 filtered_features_list_2 = np.array([row[0] for row in raw_features_list_2 if row is not None]).reshape(-1, 1)
NameError: name 'raw_features_list_2' is not defined
这是因为由于第一个Try块生成的ValueError,因此未评估第二个try块,而直接评估了第二个Except块。
我想评估第一个Try块,在First Except块中处理ValueError。然后评估第二个Try块,如果它生成ValueError,则在第二个Except块中处理它。
答案 0 :(得分:0)
抱歉,我要问的已经是python的默认行为。 我还有另一个问题,其中生成raw_features_list_2的函数在返回raw_features_list_2之前引发ValueError并中止。因此,我觉得第二个try块根本没有被评估。我通过处理返回raw_features_list_2的函数中的异常解决了我的问题。
从下面可以看出,python仅捕获一次异常。
globalVariable = 0
try
{
x = FunctionThatRandomlyGivesError();
return (x*globalVariable);
}
catch (Exception ex)
{
throw;
}
finally
{
globalVariable=1
CleanUp();
}
所以我的问题是..无关紧要的。