2017-05-26 78 views
2

我试图做一个相当基本的请求脚本签入网站,但我遇到了问题;该网站需要'传递'键,但是每当我尝试使用这个python会抛出一个错误,说无效的语法。这里是我的代码:使用'传递'作为字典关键字

import requests 

with requests.Session() as c: 
    url = 'www.a_url.com' 
    USERNAME = 'a username' 
    PASSWORD = 'a password' 
    c.get(url) 
    login_data = dict(user=USERNAME, pass=PASSWORD, jsok='1', dologin='Login') 
    c.post(url, data=login_data, headers={"Referer": 'www.a_referer.com'}) 
    page = c.get('www.a_page.com') 
    print(page.content) 
    output = open('test.html','w') 
    output.write(str(page.content)) 

而且我给出的错误是:

login_data = dict(user=USERNAME, pass=PASSWORD, jsok='1', dologin='Login') 
             ^
SyntaxError: invalid syntax 

任何想法,我怎么能强迫的Python忽略了“通行证”,只是把它作为字典键?

+0

'pass'是一个关键字在Python – MooingRawr

+0

是的,我知道,但我想的网站登录到应用传递为核心 – KlusterMonkey

回答

10

由于pass是关键字,因此它不能用作标识符。你需要为此使用一个字典 - 文字:

login_data = { 
    'user': USERNAME, 
    'pass': PASSWORD, 
    'jsok': '1', 
    'dologin': 'Login', 
} 
+0

我会尝试这个,谢谢! – KlusterMonkey

+0

这工作,谢谢!另外显然我不能再接受11分钟的答案,但这个问题已经解决了。 – KlusterMonkey

0

简短的回答,你不能这样做的语法。 pass是python的保留关键字,例如return

设置任意对象为重点的另一种方法是使用下面的语法:

login_data = {"user": USERNAME, "pass": PASSWORD, ...}

这是比较通用的,你可以使用任何东西的关键。

{None: 1, 1: 2, str: int}

+1

呃...不_anything_。你可以使用_anything_作为密钥进行散列处理。所以...'{['list!']:'没有骰子,TypeError会导致'} – mgilson

+0

避免这个问题不是“更通用”,而是字符串键被写成字符串,而不是关键字参数。 – alexis