2016-08-21 9 views
0

いくつかの単体テストを作成しているうちに、RGBカラーをHEXに変換する必要がありました。変換のための私の機能は、私はユニットテスト機能(パイソンを使用してセレン)を使用して取得していますRGBをHEXに変換しようとするとリテラルが無効になる

def rgb_to_hex(rgb): 
      return '#%02x%02x%02x' % rgb 

出力形式rgba(255, 255, 255, 1)であるされています。 [RGBAなし] rgb_to_hex()でこれを渡す

は私に、このエラーを与える:

ValueError: invalid literal for int() with base 10: '(255, 255, 255, 1)' 

私は私が値の間にスペースがその理由であると思わせるthisリンクをお読みください。しかし、私はこれを解決することができません。これをどのように過ぎ去らせるか?

+0

[MCVE]を投稿してください。 –

+0

変換する必要があります – cutzero

答えて

0

多くの理由があります: 1. rgbはこの場合3つの値を持つタプルでなければなりません。したがって、(255,255,255,1)の代わりにタプルの形で(255,255,255)を渡す必要があります。2. rgbはタプルでなければなりません。文字列の場合、これは機能しません。

"#%02x%02x%02x" % (255, 255, 255) 

はそれが

私たちが実行した場合、次の

"#%02x%02x%02x" % (255, 255, 255,1) 

が、それはすべての引数がないと言うだろう "#FFFFFF" 期待した結果が得られますPythonインタプリタで次のコマンドを使用してみてください文字列の書式設定中に変換されます。

しかし、質問に表示されたstacktraceは、 '(255、255、255、1)'を単一の文字列として渡しているように見えますが、明らかにその文字列は解析できません。 "(255,255,255,1)"の文字列をタプル(255,255,255)に変換してからフォーマッタに渡してください。文字列でsplit関数を使用して解析し、分割された値からタプルを作成することができます。分割された文字列から角括弧を切り取ることを忘れないでください。

例えば

DEF rgb_to_hex(RGB): 例えば#forあればRGB = "(255、255、255、1)"

new_string = rgb[1:-4] # remove starting brace and , 1) from last 
# new_strings will be "255, 255, 255" 

string_fractions = input_string.split(",") 
# string fractions will be ['255', ' 255', ' 255'] 

# now notice it is list of strings and we need a tuple of ints 
int_tuples = tuple(map(int, input_string.split(","))) 
# int_tuples will be (255, 255, 255) 

return '#%02x%02x%02x' % int_tuples 
関連する問題