开发者社区> 问答> 正文

Python If语句返回ValueError

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

展开
收起
is大龙 2020-03-25 09:21:35 3405 0
2 条回答
写回答
取消 提交回答
  • 代码改变世界,我们改变代码

    检查x['Min']类型,这个应该是int型,你得到的不是

    2020-03-30 09:36:27
    赞同 展开评论 打赏
  • 这样的答案也很好地解释了,谢谢@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

    2020-03-25 09:21:42
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载