代码之家  ›  专栏  ›  技术社区  ›  Grevioos

Python调度:缺少1个必需的位置参数?

  •  0
  • Grevioos  · 技术社区  · 6 年前

    from API.helpers import get_weather_data, json_to_df, create_dict
    import schedule, time
    
    URL = 'https://pm1aapplicantsdata.blob.core.windows.net/databases/CitiesWeather/CitiesWeather.csv'
    columns = ["name","sys.country","main.temp",
               "main.humidity","main.pressure",
               "visibility", "wind.speed"]
    
    def weather_api(URL):
        dict = create_dict(URL)
        for city, code in dict.items():
            data = get_weather_data(city, code)
            json_to_df(data, columns)
    
    schedule.every(10).minutes.do(weather_api())
    while True:
        schedule.run_pending()
        time.sleep(1)
    

    我想做的是定期运行它。然而,我得到一个错误说 "weather_api() missing 1 required positional argument: 'URL'" schedule.every(10).minutes.do(weather_api(URL)) 但我现在 the first argument must be callable 错误。在这种情况下。。。

    def weather_api():
        URL = 'https://pm1aapplicantsdata.blob.core.windows.net/databases/CitiesWeather/CitiesWeather.csv'
        dict = create_dict(URL)
        for city, code in dict.items():
            data = get_weather_data(city, code)
            json_to_df(data, columns)
    
    schedule.every(10).minutes.do(weather_api())
    while True:
        schedule.run_pending()
        time.sleep(1)
    

    非常感谢

    2 回复  |  直到 6 年前
        1
  •  2
  •   lincr    6 年前

    the source code of schedule

    您可能想使用 schedule.every(10).minutes.do(weather_api, URL)

        2
  •  0
  •   Ben Sh    6 年前

    我不知道你该怎么把论点传进去 .do()

    schedule.every(10).minutes.do(weather_api)
    

    而不是 weather_api()

    .do() weather_api 是您需要发送的函数,而不是它返回的数据(通过添加 () 对它)。

    我希望我写得足够清楚