Python 推特流:尝试/索引器除外
背景:我想从twitter api下载用户推文的特定部分(例如用户名、id、扩展url等)。我能够成功地做到这一点 问题:因为不是所有用户都有Python 推特流:尝试/索引器除外,python,twitter,Python,Twitter,背景:我想从twitter api下载用户推文的特定部分(例如用户名、id、扩展url等)。我能够成功地做到这一点 问题:因为不是所有用户都有扩展的\u url,我有时会收到以下错误: IndexError: list index out of range 目标:如果出现此类索引器,跳过并继续收集新推文 我认为解决这个问题的一种方法是使用try/except语句 问题:尝试/例外声明是否是实现此目标的有效方法?如果是,如何正确应用try/except语句 我尝试了以下方法: class Std
扩展的\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在评论中所说,您可以使用空字符串,稍后再处理它。每当你得到这个空字符串,你就会知道你没有数据,你就会收集新的推文。