Python-функции вызываются слишком рано в Django - PullRequest
0 голосов
/ 31 октября 2019

Даже если я назначу ее переменной, вызов API срабатывает слишком рано.

Я реализовал несколько идей, как показано в примерах (не фактический код, а те же принципы).

""" Example #1 """

fruit = 'banana'

def search_engine(fruit):
    engine = {
        'apple': google.search(Time="10 hours ago"),
        'banana': yahoo.searchNow(Time="12 min ago"),
        'pear': bing.searchNow(Time="13h ago"),
        }
    print(engine[fruit])

search_engine(fruit)



""" Example #2 """

fruit = 'banana'

def search_engine(fruit):
    GS = google.search(Time="10 hours ago")
    YS = yahoo.searchNow(Time="12 min ago")
    BS = bing.searchNow(Time="13h ago")

    engine = {
        'apple': GS,
        'banana': YS,
        'pear': BS,
        }
    print(engine[fruit])

Давайте предположим, что время является неправильным значением, и будембросить исключение независимо.

в Примере № 1, однако, «яблоко» вызывается первым и выдает исключение, когда вместо него следует вызывать «банан».

В Примере № 2 оно выдает исключение на «GS = google.search (Time .... ", вместо того, чтобы делать это для" YS = yahoo.searchNow ... "

У меня была эта проблема только после попытки интеграции моего проекта Python в Django.

Ответы [ 2 ]

2 голосов
/ 31 октября 2019

Вы должны хранить вызываемые объекты и их аргументы отдельно и вызывать их при извлечении элемента.

engine = {
    'apple': (google.search, {"Time": "10 hours ago"}),
    'banana': (yahoo.searchNow, {"Time": "12 min ago"}),
    'pear':  (bing.searchNow, {"Time": "13h ago"}),
    }
obj, kwargs = engine[fruit]
print(obj(**kwargs))
0 голосов
/ 31 октября 2019

Исключения вызываются при инициализации словаря движка, потому что вы вызываете эти функции во время инициализации, вместо этого используйте callable и kwargs.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...