SyntaxError: Missing parentheses in call to 'print'
本问题已经有最佳答案,请猛点这里访问。
我一直试图抓取一些twitter的数据,但是当我运行这段代码时,我得到了错误
有人可以帮我解决这个问题吗?
谢谢你的时间 :)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | """ 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") +" ") # 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") +" ") outfp.close() |
看起来你正在使用python 3.x,但是你在这里运行的代码是python 2.x代码。解决这个问题的两种方法:
- 在Python的网站上下载python 2.x并使用它来运行你的脚本
-
最后通过
print r 替换print r (并继续使用python 3),在最后的打印调用周围添加括号
但是今天,越来越多的python程序员正在使用python 3,官方的python wiki说明如下:
Python 2.x is legacy, Python 3.x is the present and future of the
language
如果我是你,我会选择第二个选项并继续使用python 3。
您只需要在打印statmetnt中添加pranethesis以将其转换为函数,如错误所示:
1 | print expression -> print(expression) |
在Python 2中,print是一个语句,但在Python 3中,print是一个函数。所以你也可以用Python 2运行你的代码。
另外,为什么要将所有评论都用于大写?它很烦人。您的代码也以多种方式违反了PEP 8。获得像PyCharm这样的编辑器(它是免费的)可以自动检测这样的错误。
-
你没有在
# 和评论之间留一个空格 -
您没有在
= 和其他令牌之间留出空格
看起来你试图在Python 3中运行Python 2代码,其中
1 | print(foo) |
在python 2中,print是一个声明,而不是一个函数。这意味着您可以在没有括号的情况下使用它。在python 3中,已经发生了变化。它是一个函数,你需要使用print(foo)而不是print foo。