Python 推特流:尝试/索引器除外

Python 推特流:尝试/索引器除外,python,twitter,Python,Twitter,背景:我想从twitter api下载用户推文的特定部分(例如用户名、id、扩展url等)。我能够成功地做到这一点 问题:因为不是所有用户都有扩展的\u url,我有时会收到以下错误: IndexError: list index out of range 目标:如果出现此类索引器,跳过并继续收集新推文 我认为解决这个问题的一种方法是使用try/except语句 问题:尝试/例外声明是否是实现此目标的有效方法?如果是,如何正确应用try/except语句 我尝试了以下方法: class Std

背景:我想从twitter api下载用户推文的特定部分(例如用户名、id、扩展url等)。我能够成功地做到这一点

问题:因为不是所有用户都有
扩展的\u url
,我有时会收到以下错误:

IndexError: list index out of range
目标:如果出现此类
索引器,跳过并继续收集新推文

我认为解决这个问题的一种方法是使用try/except语句

问题:尝试/例外声明是否是实现此目标的有效方法?如果是,如何正确应用try/except语句

我尝试了以下方法:

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 
但我得到了以下错误:

UnboundLocalError: local variable 'expanded_url' referenced before assignment
我已经搜索了这么多,并且有一些类似于我的问题(,)的例子

但我不确定如何直接更改代码,以便实现try/except语句。 我也愿意用其他方法来解决这个问题。
谢谢大家!

当try中的块出错时,将执行except中的块。如果在您的数据库中没有发生任何事情,则不会定义扩展的url。您应该将except块内的扩展url指定给默认值或空字符串,不管它是什么:

         try:
             expanded_url = t['entities']['urls'][0]['expanded_url']
         except:
             expanded_url = ''

当try中的块出错时,将执行except中的块。如果在您的数据库中没有发生任何事情,则不会定义扩展的url。您应该将except块内的扩展url指定给默认值或空字符串,不管它是什么:

         try:
             expanded_url = t['entities']['urls'][0]['expanded_url']
         except:
             expanded_url = ''

问题是,您可能试图在
try/except
块之后使用
expanded\u url
,但当代码抛出异常时,您不会创建变量。试着:

expanded_url = ''
try:
    expanded_url = ....
except:
    pass
或:


问题是,您可能试图在
try/except
块之后使用
expanded\u url
,但当代码抛出异常时,您不会创建变量。试着:

expanded_url = ''
try:
    expanded_url = ....
except:
    pass
或:


您的回溯可能会在另一行显示错误,因为如果
try
失败,
expanded\u url
将永远不存在。一种方法是在
块中定义
expanded\u url
的值,但
块除外,例如
expanded\u url=''
。然后,您需要将代码进一步向下更改,以处理
url
为空字符串或某个默认值的情况。通常取决于您的程序。您的回溯可能会在另一行显示错误,因为如果
try
失败,
expanded\u url
将永远不存在。一种方法是在
块中定义
expanded\u url
的值,但
块除外,例如
expanded\u url=''
。然后,您需要将代码进一步向下更改,以处理
url
为空字符串或某个默认值的情况。通常取决于您的程序。在某些情况下,
t['entities']['url'][0]。get('expanded\u url',None)
比try/except语句更有意义是的,但在这种情况下,错误不是因为t['entities']['url']为空而导致的吗?因为是Indexer?谢谢你的建议,Francisco!因为我是python新手,所以我不确定是什么保证了一个合适的默认值。你有什么建议或玩具的例子吗?谢谢@VeGABAU的建议。我试过了,收到一个AttributeError:'NoneType'对象没有属性'get',我需要知道以后如何使用扩展的url。正如roganjosh在评论中所说,您可以使用空字符串,稍后再处理它。每当你得到这个空字符串,你就会知道你没有数据,你就会收集新的推文。在某些情况下,
t['entities']['url'][0]。get('expanded_url',None)
比try/except语句更有意义是的,但在这种情况下,错误不是因为t['entities']['url']是空的吗?因为是Indexer?谢谢你的建议,Francisco!因为我是python新手,所以我不确定是什么保证了一个合适的默认值。你有什么建议或玩具的例子吗?谢谢@VeGABAU的建议。我试过了,收到一个AttributeError:'NoneType'对象没有属性'get',我需要知道以后如何使用扩展的url。正如roganjosh在评论中所说,您可以使用空字符串,稍后再处理它。每当你得到这个空字符串,你就会知道你没有数据,你就会收集新的推文。