关于python:SyntaxError:调用’print’时缺少括号

SyntaxError: Missing parentheses in call to 'print'

本问题已经有最佳答案,请猛点这里访问。

我一直试图抓取一些twitter的数据,但是当我运行这段代码时,我得到了错误SyntaxError: Missing parentheses in call to 'print'

有人可以帮我解决这个问题吗?

谢谢你的时间 :)

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运行你的代码。print(expression)向后兼容Python 2。

另外,为什么要将所有评论都用于大写?它很烦人。您的代码也以多种方式违反了PEP 8。获得像PyCharm这样的编辑器(它是免费的)可以自动检测这样的错误。

  • 你没有在#和评论之间留一个空格
  • 您没有在=和其他令牌之间留出空格


看起来你试图在Python 3中运行Python 2代码,其中print是函数和必需的括号:

1
print(foo)

在python 2中,print是一个声明,而不是一个函数。这意味着您可以在没有括号的情况下使用它。在python 3中,已经发生了变化。它是一个函数,你需要使用print(foo)而不是print foo。