功能不会参与

时间:2011-06-21 04:29:11

标签: python

下面是检查网站价格并将其发送到Twitter的代码。正如您所看到的,在第22行,我将第一个函数(获取价格)作为参数传递给第二个函数(流向Twitter)。当我运行它时,我不断收到一条错误消息,指出“TypeError:send_to_twitter()不带参数(给定1个)”。无法弄清楚为什么它不会参与争论。有什么想法吗?

import urllib.request
import time

def get_price():
    page = urllib.request.urlopen("http://www.beans-r-us.biz/prices.html")#get price from website
    text = page.read().decode("utf8")
    where = text.find('>$')
    start_of_price = where + 2
    end_of_price = start_of_price + 4
    return float(text[start_of_price:end_of_price])


def send_to_twitter():
    password_manager = urllib.request.HTTPPasswordMgr()
    password_manager.add_password('Twitter API','http://twitter.com/statuses','eyemademusic','selfishgene')
    http_handler = urllib.request.HTTPBasicAuthHandler(password_manager)
    page_opener = urllib.request.build_opener(http_handler)
    urllib.request.install_opener(page_opener)
    params = urllib.parse.urlencode({'status':msg})
    resp = urllib.request.urlopen('http://twitter.com/statuses/update.json', params)
    resp.read

price_now = input('Would you like to check the price? Y/N')
if price_now == 'Y':
    send_to_twitter(get_price())
else:
    price = 99.99
    while price > 4.74: 
        time.sleep(900)
        price = get_price   
    send_to_twitter('Buy!')

3 个答案:

答案 0 :(得分:5)

def send_to_twitter(name_of_the_argument_you_want):

答案 1 :(得分:3)

def send_to_twitter():应为def send_to_twitter(msg):

resp.read应为resp.read()price = get_price应为price = get_price()

答案 2 :(得分:3)

因为:

def send_to_twitter():
    ...

定义零参数的函数。想想这一秒;你会如何引用你想要它的论点?它在函数内部有什么名称?在函数名后面的括号内,您需要列出函数所有参数的名称。

此外,你有这个:

send_to_twitter(get_price())

您实际上并没有将函数get_price作为参数传递给send_to_twitter,而是调用 get_price并传递结果。如果要传递函数,则需要使用函数名称,而不是括号,如下所示:

send_to_twitter(get_price)