2016-08-02 95 views
-5

我一直在嘗試刮取一些Twitter的數據,但是當我運行此代碼時,出現錯誤SyntaxError: Missing parentheses in call to 'print'SyntaxError:呼叫'打印'中缺少圓括號

有人可以幫我一個這個嗎?

感謝您的時間:)

""" 
Use Twitter API to grab user information from list of organizations; 
export text file 
Uses Twython module to access Twitter API 
""" 

import sys 
import string 
import simplejson 
from twython import Twython 

#WE WILL USE THE VARIABLES DAY, MONTH, AND YEAR FOR OUR OUTPUT FILE NAME 
import datetime 
now = datetime.datetime.now() 
day=int(now.day) 
month=int(now.month) 
year=int(now.year) 


#FOR OAUTH AUTHENTICATION -- NEEDED TO ACCESS THE TWITTER API 
t = Twython(app_key='APP_KEY', #REPLACE 'APP_KEY' WITH YOUR APP KEY, ETC., IN THE NEXT 4 LINES 
    app_secret='APP_SECRET', 
    oauth_token='OAUTH_TOKEN', 
    oauth_token_secret='OAUTH_TOKEN_SECRET') 

#REPLACE WITH YOUR LIST OF TWITTER USER IDS 
ids = "4816,9715012,13023422, 13393052, 14226882, 14235041, 14292458, 14335586, 14730894,\ 
    15029174, 15474846, 15634728, 15689319, 15782399, 15946841, 16116519, 16148677, 16223542,\ 
    16315120, 16566133, 16686673, 16801671, 41900627, 42645839, 42731742, 44157002, 44988185,\ 
    48073289, 48827616, 49702654, 50310311, 50361094," 

#ACCESS THE LOOKUP_USER METHOD OF THE TWITTER API -- GRAB INFO ON UP TO 100 IDS WITH EACH API CALL 
#THE VARIABLE USERS IS A JSON FILE WITH DATA ON THE 32 TWITTER USERS LISTED ABOVE 
users = t.lookup_user(user_id = ids) 

#NAME OUR OUTPUT FILE - %i WILL BE REPLACED BY CURRENT MONTH, DAY, AND YEAR 
outfn = "twitter_user_data_%i.%i.%i.txt" % (now.month, now.day, now.year) 

#NAMES FOR HEADER ROW IN OUTPUT FILE 
fields = "id screen_name name created_at url followers_count friends_count statuses_count \ 
    favourites_count listed_count \ 
    contributors_enabled description protected location lang expanded_url".split() 

#INITIALIZE OUTPUT FILE AND WRITE HEADER ROW 
outfp = open(outfn, "w") 
outfp.write(string.join(fields, "\t") + "\n") # header 

#THE VARIABLE 'USERS' CONTAINS INFORMATION OF THE 32 TWITTER USER IDS LISTED ABOVE 
#THIS BLOCK WILL LOOP OVER EACH OF THESE IDS, CREATE VARIABLES, AND OUTPUT TO FILE 
for entry in users: 
    #CREATE EMPTY DICTIONARY 
    r = {} 
    for f in fields: 
     r[f] = "" 
    #ASSIGN VALUE OF 'ID' FIELD IN JSON TO 'ID' FIELD IN OUR DICTIONARY 
    r['id'] = entry['id'] 
    #SAME WITH 'SCREEN_NAME' HERE, AND FOR REST OF THE VARIABLES 
    r['screen_name'] = entry['screen_name'] 
    r['name'] = entry['name'] 
    r['created_at'] = entry['created_at'] 
    r['url'] = entry['url'] 
    r['followers_count'] = entry['followers_count'] 
    r['friends_count'] = entry['friends_count'] 
    r['statuses_count'] = entry['statuses_count'] 
    r['favourites_count'] = entry['favourites_count'] 
    r['listed_count'] = entry['listed_count'] 
    r['contributors_enabled'] = entry['contributors_enabled'] 
    r['description'] = entry['description'] 
    r['protected'] = entry['protected'] 
    r['location'] = entry['location'] 
    r['lang'] = entry['lang'] 
    #NOT EVERY ID WILL HAVE A 'URL' KEY, SO CHECK FOR ITS EXISTENCE WITH IF CLAUSE 
    if 'url' in entry['entities']: 
     r['expanded_url'] = entry['entities']['url']['urls'][0]['expanded_url'] 
    else: 
     r['expanded_url'] = '' 
    print r 
    #CREATE EMPTY LIST 
    lst = [] 
    #ADD DATA FOR EACH VARIABLE 
    for f in fields: 
     lst.append(unicode(r[f]).replace("\/", "/")) 
    #WRITE ROW WITH DATA IN LIST 
    outfp.write(string.join(lst, "\t").encode("utf-8") + "\n") 

outfp.close() 
+3

你試圖在Python 3運行Python 2代碼之間留出的空間。 –

+3

我知道這會讓你震驚,但是......你打電話給'print'......它缺少括號。 ('print r' - >'print(r)') –

+0

你有沒有做過任何研究?它在[問]指南中,有幾個關於堆棧溢出的問題。 –

回答

1

在蟒蛇2,打印已經聲明,不是一個函數。這意味着你可以在沒有括號的情況下使用它。在python 3中,這已經改變了。這是一個函數,你需要使用print(foo)而不是print foo。

+0

值得注意的是,我一直使用括號。這些無意義的變化從未打擾過我。再次,我仍然用C表示返回的值。有時候,那些沒有被修改以跟上Joneses運行良好的事情,即使在Joneses改變他們的模式以跟上Smiths之後。 –

2

看起來好像你正在使用python 3.x,但是你在這裏運行的代碼是python 2.x代碼。有兩種方法來解決這個問題:

  • 下載python 2.X上Python's website,並用它來運行腳本
  • 在你打印電話在年底通過在年底通過print(r)更換print r添加括號(並繼續使用蟒蛇3)

但今天,越來越多的廣大Python程序員都使用python 3,官方python wiki規定如下:

Python 2.x is legacy, Python 3.x is the present and future of the language

如果我是你,我會選擇第二個選項去繼續使用Python 3

1

看起來你想在Python 3,其中printfunction運行Python 2代碼和所需的括號:

print(foo) 
1

你只需要pranethesis添加到您的打印statmetnt將其轉換爲一個功能,如錯誤說:

print expression -> print(expression) 

在Python 2,打印是一個聲明,但在Python 3,打印是福nction。所以,你可以只交替運行您的代碼與Python 2 print(expression)是與Python 2


而且向後兼容的,你爲什麼要善用您的所有意見?它很煩人。您的代碼也以幾種方式違反PEP 8。得到像PyCharm這樣的編輯器(它是免費的),可以自動檢測這樣的錯誤。

  • 你沒有離開#和您的評論
  • 之間的空間你沒有=和其他標記