为什么请求 return "None"?

Why do requests return "None"?

import requests

def get(url):
    if url[:7] == 'http://':
        if url[7:11] == 'www.':
            print url
            response = requests.get(url)
            if response.status_code == 200:
                return 'ok'

            else:
                return 'error'
        else:
            print(url)
            url = 'http://www.' + url[7:]
            get(url)
    else:
        print(url)
        url = 'http://' + url
        get(url)

print get('example.com')

谁能告诉我为什么返回此代码 "None"

您忽略了递归调用的 return 值。您需要明确 return 那些:

return get(url)

就像您必须处理任何其他类型的函数调用的 return 值一样。

递归在这里并不是最好的解决方案;在尝试检索之前调整 URL:

def get(url):
    if not url.startswith('http://'):
        url = 'http://' + url
    if not url.startswith('http://www.'):
        url = 'http://www.' + url[7:]

    response = requests.get(url)
    if response.status_code == 200:
        return 'ok'
    else:
        return 'error'

或者更好的是,使用 urlparse library 更新 url 参数。

这是一个递归调用,你必须return每个方法调用

return get(url)

那是当你最初调用 get(url) 该方法由于递归调用再次调用 get(url) 因为第一次调用没有 return 任何参数并且在第二次调用之前它将return None 函数的默认 return 参数

您没有 return 递归调用 get() 函数的结果。

您需要 return 递归调用 get() 函数的结果,示例 -

import requests

def get(url):
    if url[:7] == 'http://':
        if url[7:11] == 'www.':
            print url
            response = requests.get(url)
            if response.status_code == 200:
                return 'ok'

            else:
                return 'error'
        else:
            print(url)
            url = 'http://www.' + url[7:]
            return get(url)
    else:
        print(url)
        url = 'http://' + url
        return get(url)

print get('example.com')