简体   繁体   English

Python“未定义变量”错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM