我正在使用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