我正在使用Python3调用API以获取火车列表,如果满足某些条件,它将向我发送关于俯卧撑的通知。
我收到的列表如下所示:
[
{
"Car": "8",
"Destination": "Vienna",
"DestinationCode": "K08",
"DestinationName": "Vienna/Fairfax-GMU",
"Group": "2",
"Line": "OR",
"LocationCode": "D1",
"LocationName": "Town",
"Min": "4"
},
{
"Car": "8",
"Destination": "NewCrltn",
"DestinationCode": "D13",
"DestinationName": "New Carrollton",
"Group": "1",
"Line": "OR",
"LocationCode": "D1",
"LocationName": "Town",
"Min": "6"
},
{
"Car": "6",
"Destination": "Vienna",
"DestinationCode": "K08",
"DestinationName": "Vienna/Fairfax-GMU",
"Group": "2",
"Line": "OR",
"LocationCode": "D1",
"LocationName": "Town",
"Min": "BRD"
}
]
我有以下for循环和嵌套的if语句,以缩小将要到达K08的火车的范围,并且在10到20分钟内没有'ARR','BRD'或'Mins'变量为null。
for x in list:
if x['DestinationCode'] == "K08":
if x['Min'] != "" or "ARR" or "BRD":
if int(x['Min']) > 10 and int(x['Min']) < 20:
#pushover script
第一个if语句适用于Destination变量。但是,对于任何具有ARR,BRD或null的错误,我都会收到以下错误:
Traceback (most recent call last):
File "./test.py", line 23, in <module>
if int(x['Min']) > 10 and int(x['Min']) < 15:
ValueError: invalid literal for int() with base 10: 'BRD'
这使我相信我的嵌套if将'ARR','BRD'和Null传递给最终的if语句,该语句除了整数以外将不接受任何内容。
问题来源:stackoverflow
这样的答案也很好地解释了,谢谢@MisterMiyagi
问题是,当您认为已将其过滤掉时,似乎出现了x ['Min']`的一些意外值。实际上,您的布尔值之一具有误导性:
if x['Min'] != "" or "ARR" or "BRD":
这只是检查x ['Min']!=“”
。实际上,或“ ARR”
不会做任何事情,因为布尔bool(“ ARR”)
始终为True!同样适用于或“ BRD”
,这解释了为什么最终在循环中最终将BRD
值转换为整数的原因。如果将x ['Min']
替换为您要跳过的值,请参见以下内容:
>>> xmin = "BRD"
>>> xmin != "" or "ARR" or "BRD"
True
当你想要错误!
如果您想说x ['Min']不能为“”“或ARR
或BRD`,则可以使用以下代码:
if x['Min'] not in ["", "ARR", "BRD"]:
要么
if x['Min'] and x['Min'] not in ["ARR", "BRD"]:
证明:
>>> xmin = "BRD"
>>> xmin not in ["", "ARR", "BRD"]
False
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。