2013-12-07 24 views
0

以下是我一直在努力的代碼。Python無效Snytax

最後一行write_csv('twitter_gmail.csv', messages, append=True)拋出一個

[EC2用戶@ IP-172-31-46-164〜] $ ./twitter_test16.sh 回溯(最近通話最後一個): 文件」。 /twitter_test16.sh」 53行,在 write_csv(‘twitter_gmail.csv’,消息,附加= TRUE) NameError:名字‘消息’是沒有定義

我已經定義了,所以我不明白的消息爲什麼它會去做。

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) 
+1

你爲什麼只是改變文本擺脫語法錯誤? – MattDMo

回答

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" 

想想當你就會知道,程序員做了一個python非法錯字,如果你正在閱讀代碼並通過筆和紙執行它。

基本上,只要能夠明確地確定使用了無效的語法,就會立即產生一個SyntaxError,這通常在發生錯誤的語句之後立即發生,而不是立即發生。

您會經常在SyntaxErrors上得到線號,它們是實際打字錯誤之下的一行(或者如果有空行或轉角的情況下有多行)。

+1

我不敢相信我錯過了那個。它完全解決了這個錯誤。 – user2748540

+0

IT現在給我一個 文件 「./twitter_test16.sh」 53行,在 write_csv( 'twitter_gmail.csv',消息,附加= TRUE) NameError:名字 '消息' 是沒有定義 – user2748540

+0

II有消息以上定義,所以我不知道爲什麼它會這樣做。 – user2748540