2016-12-15 2 views
-2
def syntax_hilight_(event): 
    for kw in keyword.kwlist: 
     size = IntVar() 
     begin = self.txt_field.search(kw, "1.0", stopindex = "end", count = size) 
     #end_index = "%s + %sc" % (begin, size.get()) 
     print(size.get()) 
     size_int = float(size.get()) 
     while size_int > 1: 
      size_int /= 10 
     float(begin) 
     end_index = float(begin) + size_int 
     self.txt_field.tag_add("search", float(begin), float(end_index)) 
     self.txt_field.tag_config("search", foreground = "green") 

Когда я запускаю эту функцию (нажмите ключ), я получаю эту ошибку:проблем преобразование строки плавать питон

File "C:/Users/roman_000/PycharmProjects/neuron/ide_custom.py", line 36, 
    in syntax_hilight_ 
float(begin) 
ValueError: could not convert string to float: 

begin является строкой, которая содержит индекс, как 6,0, 5,9, 14,19 и т.д. Я думал, что нет никаких проблем с конвертированием таких строк плавать

+1

Что вы пытаетесь сделать точно? Можете ли вы привести примеры примеров ввода-вывода? Кроме того, ваш отступ неправильный. –

+0

Вы создаете IntVar в своей функции, а затем сразу вызываете '' .get() '' на нем. У этого нет никакой возможности делать что-либо полезное, так как у var никогда не будет возможности присвоить значение. – jasonharper

+0

моя реальная проблема: я застрял с конвертирующей строкой, начинаю плавать – mark

ответ

0

использование

try: float(begin) 
except ValueError: raise RuntimeError(('could not convert to float', begin)) 
+0

Это на самом деле не отвечает на вопрос, но является хорошим способом получить сообщение об ошибке, которое может облегчить отладку. –

+0

@JohnColeman Да, только после проверки с помощью python исходное сообщение ValueError уже содержит строку с ошибкой, поэтому я не понимаю вопрос OP. Почему он не публикует строку? – Gribouillis

+0

Согласен, это странно. Тем не менее - это хорошая идея (о которой не все знают), чтобы уловить ошибки времени выполнения и сделать их более информативными, а затем снова поднять их, хотя в этом случае исходное сообщение об ошибке должно быть достаточно информативным. –

2

Проблема O ccurs, когда kw не может быть найден в тексте, и поэтому begin будет пустым, что вызывает ValueError. Попробуйте сделать выделение, когда begin не пуст. Ниже представлено мое предложенное решение:

def syntax_hilight_(self): 
    size = tk.IntVar() 
    for kw in keyword.kwlist: 
     begin = self.txt_field.search(kw, '1.0', stopindex='end', count=size) 
     if begin: 
      end_index = '%s + %sc' % (begin, size.get()) 
      self.txt_field.tag_add('search', begin, end_index) 
      self.txt_field.tag_config('search', foreground='green') 
+0

Это ошибка в сообщении ValueError python, она должна включать в себя представление строки с ошибкой. – Gribouillis

+0

Кажется, что это, вероятно, решение, хотя OP * явно * сказал, что когда они помещают в 'print (begin)' они видели «smth [sic], как 1.0» - это не то, что вы видите с помощью 'print ('') ' –

+0

@Gribouillis Я бы не назвал это ошибкой - хотя я согласен с тем, что сообщение об ошибке в вашем подходе немного более полезно, чем сообщение об ошибке по умолчанию в специальном случае пустой строки. –

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