2016-08-02 2 views
-5

J'ai essayé de gratter les données de certains twitter, mais quand jamais je cours ce code j'obtiens l'erreur SyntaxError: Missing parentheses in call to 'print'.SyntaxError: Les parenthèses manquantes dans l'appel à 'imprimer'

Quelqu'un peut-il m'aider s'il vous plaît avec celui-ci?

Merci pour votre temps :)

""" 
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

Vous essayez d'exécuter du code Python 2 en Python 3. –

+3

Je sais que ça va vous choquer mais ... votre appel à «imprimer» ... il manque des parenthèses. ('print r' ->' print (r) ') –

+0

avez-vous fait des recherches? C'est dans le guide [ask] et il y a plusieurs questions sur le débordement de la pile. –

Répondre

1

Dans python 2, impression a été une déclaration , pas une fonction. Cela signifie que vous pouvez l'utiliser sans parenthèses. En python 3, cela a changé. C'est une fonction là et vous devez utiliser print (foo) au lieu d'imprimer foo.

+0

Remarquablement, j'ai toujours utilisé des parenthèses. Ces changements absurdes ne me dérangent jamais.Là encore, je note toujours les valeurs renvoyées dans C. Parfois, les choses qui fonctionnent bien et qui ne sont pas modifiées pour suivre les Jones fonctionnent pour toujours - même après que les Jones aient changé leurs paradigmes pour suivre les Smiths. –

2

Il semble que vous utilisiez python 3.x, mais le code que vous utilisez ici est le code python 2.x. Deux façons de résoudre ce:

  • Télécharger 2.x python sur Python's website et l'utiliser pour exécuter votre script
  • Ajouter entre parenthèses autour de votre appel d'impression à la fin en remplaçant print r par print(r) à la fin (et continuer à utiliser python 3)

Mais aujourd'hui, une majorité croissante de programmeurs python utilisent python 3 et les python wiki officiels indique ce qui suit:

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

Si je vous, j'irais avec la deuxième option et continuer à utiliser python 3.

1

On dirait que vous essayez d'exécuter du code Python 2 en Python 3, où print est function et les parenthèses nécessaires:

print(foo) 
1

Vous avez juste besoin d'ajouter pranethesis à votre impression statmetnt pour le convertir en une fonction, comme l'erreur dit:

print expression -> print(expression) 

en Python 2, l'impression est une déclaration, mais en Python 3, impression est un fu nction. Donc, vous pourriez aussi simplement exécuter votre code avec Python 2. print(expression) est rétrocompatible avec Python 2.


Aussi, pourquoi capitalisant vous tous vos commentaires? C'est ennuyant. Votre code viole aussi PEP 8 de plusieurs façons. Obtenez un éditeur comme PyCharm (c'est gratuit) qui peut détecter automatiquement les erreurs comme celle-ci.

  • Vous n'avez pas laissé un espace entre les # et votre commentaire
  • Vous ne laissez pas d'espaces entre = et autres jetons