str.find == -1但字符串不能通过if条件

时间:2018-08-14 13:51:50

标签: python string if-statement

#!/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

此代码有什么问题吗?

1 个答案:

答案 0 :(得分:0)

您要递减两次i:一次在if语句中,一次在while循环中。因此,如果if语句的值为True,则i总共将减少2,并且您将跳过i的某些值。

一项快速测试表明,实际上i == 194被跳过了:i195跳到了193。因此,您提到的特定比较永远不会得到评估,因为i永远不会194

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


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

import json

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

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