使用Python的colorsys库实现RGB转HSV遇TypeError,如何修复?
修复RGB转HSV代码的TypeError问题
错误原因
colorsys.rgb_to_hsv() 函数返回的是一个包含三个浮点数的三元组(h, s, v),你用for I in ...遍历这个三元组时,每次循环的I是单个浮点数(比如第一次循环取h值,第二次取s值,第三次取v值),此时尝试I[0]自然会触发"float对象不可下标访问"的错误。
修复后的代码
直接接收函数返回的三元组,不需要多余的循环:
import colorsys def RGB_To_HSV(Red: int, Green: int, Blue: int): h, s, v = colorsys.rgb_to_hsv(Red / 255, Green / 255, Blue / 255) H = round(360 * h) S = round(100 * s) V = round(100 * v) return (H, S, V) print(RGB_To_HSV(255,127,0)) # 输出 (30, 100, 100)
补充说明
colorsys.rgb_to_hsv()返回的h值范围是0-1(对应HSV标准的0-360度),s和v值范围也是0-1(对应0-100%),所以分别乘以360和100后取整,就能得到常用的HSV格式数值。- 直接通过解构赋值获取三个分量,是处理这类返回多值函数的标准写法,既简洁又能避免循环带来的错误。
内容的提问来源于stack exchange,提问作者Sam1009
相关产品推荐
相关产品推荐

