猿问

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

#!/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在要点上


该代码有什么问题吗?


ABOUTYOU
浏览 180回答 1
1回答

慕莱坞森

您递减i两次:一次在if语句中,一次在while循环中。因此,当if语句的计算结果为时True,i将2总共减少,您将跳过的一些值i。快速测试表明确实i == 194可以跳过:i从跳转195到193。因此,您提及的特定比较不会被评估,因为i永远不会被评估194。这很容易评估和调试自己:只需print(i)在每个循环中使用,就在if语句之前,然后看看它是如何变化的。另外,您声明您的输入是字典。实际上,它是一个完全有效的JSON文件,您可以(应该)按以下方式读取它:import jsonwith open(sys.argv[1]) as f:    dic = json.load(f)无需使用eval,无需使用false = False; null = ""; true = True。这些行只会造成混乱和(严重)错误,应将其删除。请注意,顺便说一下,null(JSON)是None在Python中转换的,而不是""(空字符串)。
随时随地看视频慕课网APP

相关分类

Python
我要回答