迭代表格行调用IBM Watson NLU时如何处理返回的报错
解决方法
核心是通过Python的try-except异常捕获机制处理接口调用失败的场景,报错时自动生成填充N/A的结构一致的行,不会中断循环执行。
修改后完整代码
import pandas as pd # 原有IBM NLU相关包的导入逻辑保持不变即可 masterdf = pd.DataFrame() for index, row in df.iterrows(): text2 = row['CONTENT'] try: # 原有调用NLU接口、解析返回结果的逻辑全部放入try块 response = natural_language_understanding.analyze( text = text2, features=Features(sentiment=SentimentOptions(targets=["Irish"]))).get_result() json_tbl = pd.json_normalize(response['sentiment'], record_path='targets', meta=[['document','score'], ['document','label']]) json_tbl = json_tbl.set_index([pd.Index([index])]) except Exception as e: # 接口报错时构造字段完全对齐、值为N/A的行 json_tbl = pd.DataFrame({ "text": ["Irish"], "score": ["N/A"], "label": ["N/A"], "document.score": ["N/A"], "document.label": ["N/A"] }, index=[index]) print(json_tbl.head()) # 替换已被pandas废弃的append方法,用官方推荐的concat拼接 masterdf = pd.concat([masterdf, json_tbl], axis=0) masterdf = pd.concat([df, masterdf], axis=1) masterdf.head()
关键说明
- 异常捕获部分新手直接使用通用
Exception即可覆盖目标实体不存在、网络请求失败等所有接口调用异常场景,若要精准匹配IBM NLU的目标不存在错误,可替换为SDK对应的具体异常类 - 构造N/A行时严格对齐正常返回的字段结构,避免后续和原表合并时出现列错位
内容的提问来源于stack exchange,提问作者pericles Andon
相关产品推荐
相关产品推荐

