python - 如何处理 value == None 正常并且应该通过的异常?
问题描述
我得到的响应是 None 并且没问题,这不是错误。但是每次运行程序时都会出现异常。
response = None
try:
if ~self.session.is_active:
self.session.rollback()
data = self.session.query(Data)\
.filter(GeocoderData.address == address)
.first()
response = data.yandex['response']
logger.info(f"response = {str(e)}")
except (TypeError, ValueError) as e:
self.db_session.rollback()
self.error = messages["db_error"]
logger.error(f"{str(e)}")
return response
我试着做这样的:
if response or response == None:
在尝试块中,它不起作用
我应该如何处理这种情况,得到响应 = None 是可以的,它也不例外?
解决方案
你得到了KeyError: 'response'
,因为在 .response 中没有名为response的字段data.yandex
。而不是通过方括号获取字典值:
data.yandes['response']
使用 getter,指定默认值
data.yandes.get('response', None)
这样,如果没有名为 'response' 的字段,它将返回None
. 接下来要做的事情,如果您希望None
响应正常,但其他一切都不好,请执行以下操作:
if response is not None:
raise ValueError
这样,如果您的响应返回None
,则程序正常运行,但如果它不是None
,则抛出错误,并且您的except
子句正在运行。
推荐阅读
- sql - SQL 子查询大于/小于运算符
- python - 如何在 Django 中正确使用聚合
- firebase - request.resource 地图上的 size() 函数不是我所期望的
- sql - Rails has_many through 查询,有两个引用,也就是使用 through table 属性
- python - 在 Azure DevOps 上的 Linux 上使用 pyinstaller 获取“IOError: Python library not found”
- php - 使用 laravel 设置基于 SaaS 的应用程序
- javascript - 如何将gridview中的datetimepicker设置为动态的?
- payment-processing - 在 EMV 应用程序中设置 TVR 是 L2 级任务还是 L3 级?
- css - 引导表没有响应,为什么?
- c# - 如何从派生类的对象访问虚拟属性