【问题标题】:str.find == -1 but the string cant pass the if conditionstr.find == -1 但字符串不能通过 if 条件
【发布时间】:2018-08-14 13:51:49
【问题描述】:
#!/usr/bin/env python
# coding=utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import json
import requests
from chardet import detect

false = False
null = ""
true = True
#from werobot import client
file_path = 'data1.json'
with open(file_path) as f:
    js = f.read()

dic = eval(js)



def ana(month):
    i = len(dic["items"])-1
    st = ""
    while i > 0:
        #print dic["items"][i]["name"]

        if st.find(dic["items"][i]["name"]) == -1:
            #print st.find(dic["items"][194]["name"])

            st = st + dic["items"][i]["properties"]["lastModifiedDate"][0:4].replace("/",".")+" " + dic["items"][i]["name"] +str(i)+"\n"
            i = i - 1
        i = i - 1

    return st 
all_data = ana("7")

print all_data

st.find(dic["items"][194]["name"]) = -1

但它不能通过if条件:

st.find(dic["items"][i]["name"]) == -1

data1.json 很重要:data1.json on gist

这段代码有什么问题吗?

【问题讨论】:

  • 使用json.load加载json数据,而不是eval
  • 对不起,这是一个字典,不是一个 json 文件
  • 请将您的行重新格式化为 80 个字符或更少,这样实际的 if 语句就可以阅读,而无需滚动并忽略其余代码。
  • 您是否排除了 if 语句中的任何其他子句失败的可能性? str.find 只是该 if 语句中的众多子句之一;他们中的任何一个都可能失败。
  • 格式似乎是 JSON,它被称为 data1。 json。怎么可能是字典?

标签: python string if-statement


【解决方案1】:

您将 i 递减两次:一次在 if 语句中,一次在 while 循环中。因此,当 if 语句的计算结果为 True 时,i 将总共减少 2,并且您将跳过 i 的一些值。

快速测试表明,i == 194 确实被跳过:i195 跳转到 193。因此,您提到的特定比较永远不会被评估,因为i 永远不会是194

这很容易自己评估和调试:只需在每个循环中使用 print(i),就在 if 语句之前,看看它是如何变化的。


此外,您声明您的输入是一个字典。事实上,它是一个完全有效的 JSON 文件,您可以(应该)按如下方式阅读它:

import json

with open(sys.argv[1]) as f:
    dic = json.load(f)

不用eval,不用false = False; null = ""; true = True。这些行只会造成混乱和(严重)错误,应该删除。顺便注意一下,null (JSON) 在 Python 中被转换为 None,而不是 ""(空字符串)。

【讨论】:

  • 非常感谢,这确实是一个愚蠢的问题。我很困惑。
  • 我会尝试 json.load(f),几天前我尝试了这个函数,但它引发了异常
  • @chenjunjie 我没问题;可能是因为我使用的是 Python 3,而您似乎使用的是 Python 2。在这种情况下,encoding parameter of json.loads 可能会有所帮助,尽管默认值似乎已经是 UTF-8。可能还为with open(...) 添加编码,或者尝试读取为二进制。或者(并且最好),切换到 Python 3。
  • 非常感谢您的帮助,错误信息显示“ValueError: No JSON object could be decoded”,我使用的是python 2.7.3
猜你喜欢
  • 2018-04-25
  • 1970-01-01
  • 1970-01-01
  • 2019-06-26
  • 2015-10-17
  • 1970-01-01
  • 1970-01-01
  • 2019-10-27
  • 1970-01-01
相关资源
最近更新 更多