Нет вывода из модуля щелчка Python? - PullRequest
1 голос
/ 25 апреля 2019

Я пытался следовать этому руководству от Дэна Бадера на click, но по какой-то причине код там не работает в командной строке с $ python cli.py 'London' и, к сожалению, он не возвращает ошибок, поэтому это сложноисследовать, что здесь происходит.

Однако функция current_weather() работает как шарм в Spyder IDE, поэтому сначала я подозревал проблему совместимости между версией Python Anaconda и модулем click, поэтому я полностью удалил Anaconda и теперь я работаю на Python3.6.7 для Ubuntu.

Но все же я не могу заставить его работать в CLI, и он не возвращает ошибку.Что я здесь не так делаю?

import click
import requests

SAMPLE_API_KEY = 'b1b15e88fa797225412429c1c50c122a1'

@click.command()
@click.argument('location')
def main(location, api_key):
    weather = current_weather(location)
    print(f"The weather in {location} right now: {weather}.")


def current_weather(location, api_key=SAMPLE_API_KEY):
    url = 'http://samples.openweathermap.org/data/2.5/weather'

    query_params = {
        'q': location,
        'appid': api_key,
    }

    response = requests.get(url, params=query_params)

    return response.json()['weather'][0]['description']

В CLI:

$ python cli.py
$
$ python cli.py 'London'
$

В IDE Spyder:

In [1109]: location = 'London'

In [1110]: current_weather(location)
Out[1110]: 'light intensity drizzle'

При использовании с pdb отладчиком исходного кода *, pdb автоматически вводит посмертную отладку, что означает ненормальное завершение программы.Но ошибки нет ...

$ python -m pdb cli.py 'London'
> /home/project/cli.py(2)<module>()
-> import click
(Pdb) 

У меня установлено click-7.0 и Python 3.6.7 (default, Oct 22 2018, 11:32:17)

1 Ответ

1 голос
/ 26 апреля 2019

Вам необходимо позвонить main():

if __name__ == '__main__':
    main()

Полный пример:

import click

@click.command()
@click.argument('location')
def main(location):
    weather = current_weather(location)
    print(f"The weather in {location} right now: {weather}.")


def current_weather(location):
    return "Sunny"


if __name__ == '__main__':
    main()

Использование инструментов настройки

В качестве альтернативы вы можете использовать инструменты настройки, а затем вызовите main следующим образом:

Отладка:

Я настоятельно рекомендую PyCharm в качестве Python IDE.Это может сделать работу такого рода намного проще.

...