Ошибка аргумента тайм-аута urllib.request.Request - PullRequest
0 голосов
/ 05 июня 2018

Когда я добавляю аргумент тайм-аута в функцию, мой код всегда переходит в исключение и выводит сообщение «Я потерпел неудачу».Когда я удаляю аргумент timeout, код работает как надо и входит в предложение try.Любая информация о том, как аргумент timeout работает в функции urllib.request?

import urllib.request
url = 'stackoverflow.com'

try:
    req = urllib.request.Request("http://" + url, timeout = 1000000000)
    req = urllib.request.urlopen(req)
    print("I tried.")
except:
    print("I failed.")

Я попытался использовать запросы вместо urllib, и код работает с включенным аргументом timeout.В приведенном ниже коде он всегда входит в предложение try с переданным аргументом timeout или без него.

import requests
url = 'stackoverflow.com'

try:
    req = requests.get("http://" + url, timeout=1000000)
    print("I tried.")
except:
    print("I failed.")

Однако я не хочу использовать запросы из-за некоторых конфликтов в моем коде позже.Любые идеи о том, как включить таймаут с urllib?

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Если вы посмотрите документацию функции Request (https://docs.python.org/3/library/urllib.request.html#urllib.request.Request)), вы увидите, что аргумента тайм-аута нет. Таким образом, ваша функция просто выбрасывает, поскольку вы передаете нераспознанный аргумент с ключевым словом. Один из способов увидеть, что происходит, эточтобы фактически перехватить и напечатать исключение следующим образом:

import urllib.request
url = 'stackoverflow.com'

try:
    req = urllib.request.Request("http://" + url,timeout=1000)
    req = urllib.request.urlopen(req)
    print("I tried.")
except Exception as exc:
    print(exc)

, который печатает:

init () получил неожиданный аргумент ключевого слова 'timeout'

0 голосов
/ 05 июня 2018

в urllib.request.Request нет начальных параметров, таких как timeout, но в urllib.request.urlopen , поэтому вам необходимо:

import urllib.request
url = 'stackoverflow.com'

try:
    req = urllib.request.Request("http://" + url)
    req = urllib.request.urlopen(req, timeout=1000000000)
    #                                 ^^^^^^^
    print("I tried.")
except:
    print("I failed.")
...