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

をfloat型に文字列を変換し、私はこの機能(キーを押す)を実行すると、私はこのエラーを取得:問題は、Pythonに

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の質問を理解できません。なぜ彼は文字列beginを投稿しないのですか? – Gribouillis

+0

私は同意する、それは不思議です。それでも、元のエラーメッセージで十分な情報が得られていたはずですが、ランタイムエラーを捕捉してより有益なものにして、再度それらを呼び出すことができるのは良いアイデアです(誰もが知っているわけではありません)。 –

2

問題0をfloatへの変換などの文字列に問題がないと思いましたテキストの中に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

これはPythonのValueErrorメッセージのバグで、失敗した文字列のreprを含める必要があります。 – Gribouillis

+0

これはおそらく解決策であるようですが、OP *明示的には、 'print(begin)'を入れたときに1.0と同様の "smth [sic]"を見たことがあります。これは 'print( '') ' –

+0

@Gribouillis私はあなたのアプローチのエラーメッセージが空の文字列の特別な場合のデフォルトのエラーメッセージよりも少し役に立ちますが、私はそれをバグと呼んでいません。 –