2016-12-15 7 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") 

Wenn ich ausführen, um diese Funktion (eine Taste drücken) bekomme ich diesen Fehler:Probleme String Umwandlung Python zu schweben

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 ist eine Zeichenfolge, die einen Index enthält wie 6,0, 5,9, 14,19 usw. ich dachte, es gibt keine Probleme mit der Umwandlung solcher Strings

+1

Was versuchst du genau zu tun? Können Sie einige Beispiele für Input-Output-Beispiele angeben? Außerdem ist Ihr Einzug nicht korrekt. –

+0

Sie erstellen eine IntVar in Ihrer Funktion und rufen dann sofort '' get() '' darauf auf. Dies hat keine Möglichkeit, etwas Nützliches zu tun, da die Var niemals eine Chance haben wird, einen Wert zugewiesen zu bekommen. – jasonharper

+0

Mein aktuelles Problem ist, ich bin mit der Umwandlung der Zeichenfolge fest, beginnen zu schweben – mark

Antwort

0

Verwendung

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

Dies beantwortet die Frage nicht wirklich, aber es ist eine nette Möglichkeit, eine Fehlermeldung zu erhalten, die das Debuggen erleichtern könnte. –

+0

@JohnColeman Ja, nach der Überprüfung mit Python enthält die ursprüngliche ValueError-Nachricht bereits die fehlerhafte Zeichenfolge, daher verstehe ich die Frage des OP nicht. Warum postet er den String nicht? – Gribouillis

+0

Ich stimme zu, es ist seltsam. Dennoch - es ist eine nette Idee (die nicht jeder kennt), Laufzeitfehler zu erfassen und sie informativer zu machen und sie dann wieder anzuheben, obwohl in diesem Fall die ursprüngliche Fehlermeldung informativ genug sein sollte. –

2

Das Problem o zu schweben tritt auf, wenn kw nicht im Text gefunden werden kann und so begin leer ist, was die ValueError verursacht. Versuchen Sie die Hervorhebung, wenn begin nicht leer ist. Unten ist meine vorgeschlagene Lösung:

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

Dies ist ein Fehler in Pythons ValueError-Nachricht, es sollte den Ausdruck der fehlerhaften Zeichenfolge enthalten. – Gribouillis

+0

Dies scheint wahrscheinlich die Lösung zu sein, obwohl OP * explizit * sagte, dass wenn sie 'print (begin)' einfügten, sie "smth [sic] like 1.0" sahen - was nicht das ist, was man mit 'print ('') ' –

+0

@Gribouillis Ich würde es nicht einen Fehler nennen - obwohl ich zustimme, dass die Fehlermeldung in Ihrem Ansatz ein wenig hilfreicher als die Standard-Fehlermeldung im Sonderfall einer leeren Zeichenfolge ist. –