如何返回一个关于成功的布尔值,并且仍然在python中包含http状态代码?

如何返回一个关于成功的布尔值,并且仍然在python中包含http状态代码?,python,return-value,http-error,Python,Return Value,Http Error,我希望能够在方法调用成功时返回success,但在方法调用失败时仍然能够返回http错误代码 显然,唯一计算为False的数值是0,因此以数字形式返回http代码将计算为true 我的印象是,解决方案是返回一个仅对200-2xx值求值为true的对象,该对象还可以转换为数字,以便人们可以对其进行比较 你知道有谁有类似的方法吗?--我不喜欢在这种情况下引发异常的想法。只需返回两个结果,即成功标志和http响应: def some_function(): return success, ht

我希望能够在方法调用成功时返回success,但在方法调用失败时仍然能够返回http错误代码

显然,唯一计算为False的数值是0,因此以数字形式返回http代码将计算为true

我的印象是,解决方案是返回一个仅对200-2xx值求值为true的对象,该对象还可以转换为数字,以便人们可以对其进行比较


你知道有谁有类似的方法吗?--我不喜欢在这种情况下引发异常的想法。

只需返回两个结果,即成功标志和http响应:

def some_function():
    return success, http_response
并使用元组赋值:

success, response = some_function()
if success:
采用的方法是始终返回响应对象,然后根据响应代码选择引发异常:

response = requests.get(url)
response.raise_for_status()
其中,为API用户提供引发异常的选项。另一个选项是测试状态代码:

if not 200 <= response.status_code <= 299:
    # problem status response

如果不是200我不确定您的意思,但我假设您只是想捕获Http错误。那么,这就是你的意思吗?(我通常使用内置模块“urllib2”执行http请求/打开URL)


依赖返回值来表示成功/失败不是python式的,尤其是在一个本来应该返回某些东西的函数中

只需返回HTTP代码。如果函数失败,则引发异常(创建自定义异常--
TimeoutError
UnknownHostError
…并将HTTP代码作为其属性之一)


另外,看看Requests库()做了什么。响应对象有一个
raise\u for_status
方法,如果它们的HTTP代码不在2xx范围内,该方法将引发异常。

我曾考虑过这种方法,但据我所知,它不起作用,因为像
(False,401)
这样的元组将作为
True
进行计算。这就是为什么需要解压缩返回的元组,请参阅第二个代码段。我不测试
如果某个函数()
,我会测试
成功
,它是返回元组中的第一个值。如果解包不是您想要做的,那么您需要一个类对象,它包含布尔值的repr和包含状态代码的属性。@MarcelWilson如果我必须解包,它将不再是一个简单的解决方案,而不是解包异常似乎要好得多。
 import urllib2
 try:
    urllib2.urlopen(url) #open a url
 except urllib2.HTTPError, err:
    if err.code == 404:
            print "Page not found!"
    elif err.code == 403:
        print "Access denied!"
    else:
        print "Something happened! Error code", err.code
 except urllib2.URLError, err:
    validationerror = err
    print(" ")
    print("Connection error")
    print(err)
    print "Can not connect to annotation review server"
    print(" ")
 except:
    validationerror = (sys.exc_info()[0])
    print(validationerror)