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