我如何使我的错误处理更好



我正在提取需要有一列ID值的数据,以便与另一个数据集匹配。此ID号位于我在DataFrame中名为"campaign"的列中提取的数据集中的活动名称内。当我尝试从"Campaign"中提取ID号时,此列表比DataFrame的总条目短。我认为我的错误处理是罪魁祸首。"Campaign"中的条目通常遵循以下格式:

'CompanyAbbreviation_CampaignName_AccountNumber_ChannelNumber' 

(这是我试图提取的通道号),然而,一些条目将缺少AccountNumber, ChannelNumber,而其他条目将有一个完整的条目加上'_deleted'。

下面是我的代码:
ID = []
campaigns = frame['Campaign']
for cam in campaigns:
    try:
        blocks = re.split('_',cam)
        for block in blocks:
            if len(block) == 6 and block.isdigit() or 5 and block.isdigit():
                ID.append(block)
    except ValueError:
        ID.append(000000)
ID = pd.Series(ID)
#frame.index = ID
#frame['Channel_ID'] = frame.index
return frame, ID
编辑:一些数据的截图http://prntscr.com/8jck72

您的except块永远不会运行,因为只要所有cam值都是字符串,您在try块中所做的任何事情都不会引发异常。如果您要检测的"错误"是在活动字符串中没有五位数或六位数,则应该在append调用后放置break,并在循环结束后使用else。如果循环结束而没有命中break,则运行else块:

for cam in campaigns:
    blocks = re.split('_',cam)
    for block in blocks:
        if len(block) in (5, 6) and block.isdigit():
            ID.append(block)
            break
    else:
        ID.append('000000')

我还修复了上面评论中指出的if语句中的错误,并且还将默认的000000值设置为字符串,而不是冗长地编写整数0