当Python生成错误时,中断for循环



我希望我的Python循环(如下所示(能够工作,直到出现错误。我在其他地方看到,你可以在for循环中使用while True,但我不确定你是否可以将其与错误联系起来。产生的错误将是这样的:

ValueError: No neighbors found for test samples [700], you can try using larger radius, give a label for outliers, or consider removing them from your dataset.

我该如何将其融入我的循环中?

x = 0
y = 0
for i in range(100):
raidus_class = RadiusNeighborsClassifier(radius=100-i).fit(X_train, y_train)
new["radius"] = raidus_class.predict(X_test)
if (sum(new.quality == new.radius) > x):
x = sum(new.quality == new.radius)
y = i
print(i)
print("Sum of correct prediction: ", x)
print("At n-neighbours = ", y)

非常感谢,本。

这可以在Python 中使用异常来完成

请注意,下面的代码只有在遇到ValueError 时才会停止

x = 0
y = 0
for i in range(100):
try:
raidus_class = RadiusNeighborsClassifier(radius=100-i).fit(X_train, y_train)
new["radius"] = raidus_class.predict(X_test)
if (sum(new.quality == new.radius) > x):
x = sum(new.quality == new.radius)
y = i
print(i)
except ValueError:
break
print("Sum of correct prediction: ", x)
print("At n-neighbours = ", y)

我们可以使用捕获任何类型的异常

x = 0
y = 0
for i in range(100):
try:
raidus_class = RadiusNeighborsClassifier(radius=100-i).fit(X_train, y_train)
new["radius"] = raidus_class.predict(X_test)
if (sum(new.quality == new.radius) > x):
x = sum(new.quality == new.radius)
y = i
print(i)
except:
break
print("Sum of correct prediction: ", x)
print("At n-neighbours = ", y)

警告!特别是在使用jupyter时,使用异常会忽略stopiteration或stop,但这不应该是一个问题,因为您的语句中包含了break。

您应该使用tryexcept:

while True :
try :
# Your code inside loop
except :
break # If error occurred 

您也可以在for循环中实现这一点:

for i in range(100) :
try :
# Your code inside loop
except :
break # If error occurred 

只需使用try-and-except子句。

x = 0
y = 0
for i in range(100):
try:
raidus_class = RadiusNeighborsClassifier(radius=100-i).fit(X_train, y_train)
new["radius"] = raidus_class.predict(X_test)
if (sum(new.quality == new.radius) > x):
x = sum(new.quality == new.radius)
y = i
print(i)
except Exception as e:
print(e)
break
print("Sum of correct prediction: ", x)
print("At n-neighbours = ", y)