在编写一些单元测试时,我不得不将RGB颜色转换为HEX。我的转换功能是
environment.mode
我使用单元测试函数(使用Python的Selenium)获得的输出格式为 def rgb_to_hex(rgb):
return '#%02x%02x%02x' % rgb
。
在rgba(255, 255, 255, 1)
[没有rgba]中传递此内容会出现此错误:
rgb_to_hex()
我读了this链接,这让我觉得值之间的空格就是这个原因。但是,我无法解决这个问题。如何克服这个?
答案 0 :(得分:0)
可能有很多原因: 1.在这种情况下,rgb应该是元组,有3个值。所以(255,255,255)以元组的形式需要在这里传递而不是(255,255,255,1) 2. rgb必须是一个元组,如果它是字符串,这将不起作用。
尝试在python解释器中使用以下命令
"#%02x%02x%02x" % (255, 255, 255)
它会给出预期的结果" #fffff"
如果我们运行以下
"#%02x%02x%02x" % (255, 255, 255,1)
它会说不是在字符串格式化过程中转换的所有参数。
但是问题中显示的堆栈跟踪看起来像是在传递'(255,255,255,1)'作为单个字符串,显然无法解析为它。 因此,请确保您正在转换"(255,255,255,1)和#34;在将其传递给格式化程序之前将字符串转换为元组(255,255,255)。你可以使用string上的split函数来解析它,然后从splitted值创建一个元组。记得要从分割的字符串中剪掉括号。
e.g
def rgb_to_hex(rgb): #例如,如果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