Twitter Streaming: Try/Except for IndexError
背景:我想从TwitterAPI下载用户tweets的特定部分(例如用户名、ID、扩展的URL等)。我能成功地做到这一点。
问题:由于不是所有用户都有
1 | IndexError: list index out of range |
目标:如果出现这种情况,跳过并继续收集新的tweets。
我认为解决这个问题的一种方法是使用try/except语句
问题:尝试/例外声明是否是实现此目标的有效方法?如果是,如何正确应用try/except语句?
我尝试了以下方法:
1 2 3 4 5 6 7 8 9 | class StdOutListener(StreamListener): def on_data(self, data): t = json.loads(data) tweet_id = t['id_str'] user_name = t['user']['name'] try: expanded_url = t['entities']['urls'][0]['expanded_url'] except: pass |
但我得到以下错误:
1 | UnboundLocalError: local variable 'expanded_url' referenced before assignment |
我到处搜索过,有几个与我的问题类似的例子(unboundlocalerror:在赋值之前引用了本地变量"url_request",unboundlocalerror:在赋值之前引用了本地变量"url")。
但我不知道如何直接更改代码,以便实现try/except语句。我也愿意用其他方法来解决这个问题。谢谢您!
当try中的块出错时,将执行except中的块。如果除了(它只通过)之外没有发生任何事情,则不会定义扩展的URL。您应该将except块中的扩展URL分配给默认值或空字符串,无论它是什么:
1 2 3 4 | try: expanded_url = t['entities']['urls'][0]['expanded_url'] except: expanded_url = '' |
问题是,您可能试图在
1 2 3 4 5 | expanded_url = '' try: expanded_url = .... except: pass |
或:
1 2 3 4 | try: expanded_url = .... except: expanded_url = '' |