Python try-except循环中的多个值,如果引发任何异常,则跳过当前迭代

时间:2017-10-31 12:49:42

标签: python python-3.x error-handling

我在循环中同时将值从数据集中的多个列转换为浮点数,其中我尝试跳过带有ValueError异常的错误行

我的数据已经加载了一个结构,使我可以循环它

A_floated = []
B_floated = []

for i in range(len(data)):

    A = data[i]["column_A"]
    B = data[i]["column_B"]

    try:
        A = float(A)
        A_floated.append(A)

        B = float(B)
        B_floated.append(B)

    except(ValueError):
        continue

我希望异常包含A和B,因此如果中的任何包含错误行,则会为此i跳过所有这些异常,以便len(A_floated) == len(B_floated)。现在,我只能弄清楚如何在单个列的基础上跳过坏行,但最后我得到了不同长度的浮动列。

如何做到这一点?

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您希望在迭代到A_floated期间分别在数据结构B_floateddata中收集“好”(浮动)行。如果是这样,请尝试将以前的数据结构放在循环外部,并检查在将值放入列表之前是否可以将值转换为浮点数。否则,值A可以转换而值B不可转换,这将导致A_floatedB_floated的不同长度。总结一下,请尝试以下代码:

A_floated = []
B_floated = []

for i in range(len(data)):

    A = data[i]["column_A"]
    B = data[i]["column_B"]

    try:
        # "floatability" check.
        A = float(A)
        B = float(B)

        # If both values can be converted into a float,
        # put them into the respective lists.
        A_floated.append(A)
        B_floated.append(B)

    except(ValueError):
        continue

答案 1 :(得分:1)

如果没有异常发生,使用可以使用运行的else clausetry并转换,不要在那里做任何追加,如果没有错误发生,请附加else子句:

try:
    A = float(A)
    B = float(B)
except ValueError:
    continue
else:
    A_floated.append(A)
    B_floated.append(B)

我删除了ValueError周围的括号,因为它们不是必需的。