以下是我一直在处理的代码。
最后一行write_csv('twitter_gmail.csv', messages, append=True)
抛出
[ec2-user @ ip-172-31-46-164~] $ ./twitter_test16.sh Traceback(最近一次调用最后一次): 文件“./twitter_test16.sh”,第53行,in write_csv('twitter_gmail.csv',messages,append = True) NameError:未定义名称'messages'
我已经定义了消息,所以我不明白为什么会这样做。
import csv
import json
import oauth2 as oauth
import urllib
import sys
import requests
import time
CONSUMER_KEY = "
CONSUMER_SECRET = "
ACCESS_KEY = "
ACCESS_SECRET = "
class TwitterSearch:
def __init__(self, ckey=CONSUMER_KEY, csecret=CONSUMER_SECRET,
akey=ACCESS_KEY, asecret=ACCESS_SECRET,
query='https://api.twitter.com/1.1/search/tweets.{mode}?{query}'
):
consumer = oauth.Consumer(key=ckey, secret=csecret)
access_token = oauth.Token(key=akey, secret=asecret)
self.client = oauth.Client(consumer, access_token)
self.query = query
def search(self, q, mode='json', **queryargs):
queryargs['q'] = q
query = urllib.urlencode(queryargs)
return self.client.request(self.query.format(query=query, mode=mode))
def write_csv(fname, rows, header=None, append=False, **kwargs):
filemode = 'ab' if append else 'wb'
with open(fname, filemode) as outf:
out_csv = csv.writer(outf, **kwargs)
if header:
out_csv.writerow(header)
out_csv.writerows(rows)
def main():
ts = TwitterSearch()
response, data = ts.search('@gmail.com', result_type='recent')
js = json.loads(data)
messages = ([msg['created_at'], msg['txt'], msg['user']['id']] \
for msg in js.get('statuses', []))
write_csv('twitter_gmail.csv', messages, append=True)
答案 0 :(得分:4)
前一行缺少一个括号。
messages = ([msg['created_at'], msg['txt'], msg['user']['id']] for msg in js.get('statuses', [])
应该是:
messages = ([msg['created_at'], msg['txt'], msg['user']['id']] for msg in js.get('statuses', []))
当您改为打印时,我很惊讶它有效吗?当你这样做时,你也在改变理解吗?
你问为什么错误的行号是在错误的语法之后?
尝试将其放在文件的第一行并运行它,并记下SyntaxError
的行。
a = (]
然后尝试这个并查看行号:
a = (
b = "some stuff"
最后,试试这个:
a = (
b = "some stuff"
想想你何时知道程序员如果你正在阅读代码并通过笔和纸进行代码而犯了一个非法的错字。
基本上,一旦可以明确地确定使用了无效语法,就会引发SyntaxError
,这通常是在发生错误的语句之后,而不是立即发生。
您经常会在SyntaxErrors
上获得一行(或多行,如果有空行或一个角落的情况下)的实际拼写错误。