2012-01-27 6 views
0

Я пытаюсь вырваться из для цикла, но по какой-то причине следующий не работает, как ожидалось:Перерыв заявление в Python

for out in dbOutPut: 
    case_id = out['case_id'] 
    string = out['subject'] 
    vectorspace = create_vector_space_model(case_id, string, tfidf_dict) 
    vectorspace_list.append(vectorspace) 
    case_id_list.append(case_id) 

    print len(case_id_list) 

    if len(case_id_list) >= kcount: 
     print "true" 
     break 

Он просто держит итерация недо конца dbOutput. Что я делаю не так?

+1

Что такое 'kcount'? Пожалуйста, покажите * все * соответствующие части вашего кода. –

+0

hi kcount - переменная, которую я вводил .. но ее путь меньше, чем размер этого списка..kcount = 20 ... и общая длина dboutput равна 100000 – Fraz

+2

Вы пытались добавить 'print kcount' для проверки состояния на самом деле встретились? – Li0liQ

ответ

6

Я предполагаю, что на основе вашего previous question, что kcount - это строка, а не int. Обратите внимание, что когда вы сравниваете Int со строкой, (в CPython версии 2) int is always less than the string потому что 'int' предшествует 'str' в алфавитном порядке:

In [12]: 100 >= '2' 
Out[12]: False 

Если kcount является строкой, то решение добавить тип к argparse аргумент:

import argparse 
parser=argparse.ArgumentParser() 
parser.add_argument('-k', type = int, help = 'number of clusters') 
args=parser.parse_args() 
print(type(args.k)) 
print(args.k) 

работает

% test.py -k 2 

дает

<type 'int'> 
2 

Это заблуждение ошибка не возникнет в Python3. Там, сравнивая int и str, возникает TypeError.

+0

инсульт гения :) yepp – Fraz

4

Может случиться так, что kcount на самом деле является строкой, а не целым числом и, следовательно, никогда не может стать меньше целого числа?
См. Сравнение строк в int в python question для более подробной информации.

Смежные вопросы