[英]Python “variable not defined” error when it is
Below is the code I have been working on. 下面是我一直在努力的代码。 I am new to python and programing and have been trying to teach myself.
我是python和程序设计的新手,并且一直在尝试自学。
I get the following error. 我收到以下错误。 But
messages
is defined so I don't understand. 但是
messages
已定义,所以我听不懂。
[ec2-user@ip-172-31-46-164 ~]$ ./twitter_test16.sh
Traceback (most recent call last):
File "./twitter_test16.sh", line 53, in <module>
write_csv('twitter_gmail.csv', messages, append=True)
NameError: name 'messages' is not defined
code: 码:
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)
# I need to parse the content in js and turn it into a generator expression
messages = ([msg['created_at'], msg['txt'], msg['user']['id']] for msg in js.get('statuses', []))
#
write_csv('twitter_gmail.csv', messages, append=True)
I have "messages defined" so I dont know why I am getting an error telling me "messages" is not define. 我有“已定义的消息”,所以我不知道为什么我得到一个错误消息,告诉我“消息”未定义。
Because the line write_csv('twitter_gmail.csv', messages, append=True)
is not part of the main()
function. 因为
write_csv('twitter_gmail.csv', messages, append=True)
不是 main()
函数的一部分。 The line has not been indented at all, so Python sees it as a separate line of code following the main()
function, and executes it immediately when you run this script. 该行根本没有缩进,因此Python将其视为
main()
函数之后的另一行代码,并在运行此脚本时立即执行它。
Indent that line to match the messages
line, and don't forget to call main()
: 缩进该行以匹配
messages
行,并且不要忘记调用 main()
:
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)
if __name__ == '__main__':
main()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.