Расписание Python: отсутствует 1 обязательный позиционный аргумент? - PullRequest
0 голосов
/ 28 сентября 2018

это мой код.

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)

... ошибка остается.Я пытался использовать Advanced Python Scheduler раньше, но проблема была та же.Мой скрипт отлично работает в противном случае.Что я делаю не так?

Большое спасибо заранее

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

См. исходный код расписания

Вы можете использовать schedule.every(10).minutes.do(weather_api, URL)

0 голосов
/ 28 сентября 2018

Я не уверен, как вы должны посылать аргумент внутри .do(), но насчет второго исключения, вы должны запустить его так:

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

вместо weather_api().

.do() ожидает функцию в качестве параметра, а weather_api - это функция, которую нужно отправить, а не данные, которые она возвращает (добавляя к ней ()).

Надеюсь, я написал это достаточно ясно.:)

...