2012-06-15 103 views
2

如何設置值爲只接受Python中的某些數據?就像我爲一個顏色標識符編寫代碼一樣。我希望我的變量只接受高達FFFFFF的任何值。基地 - 16個字符非常... 十六進制代碼檢查錯誤

我想這樣做的原因是因爲如果用戶喜歡GGGGGG值進入它會給他們一個腳本錯誤,這實際上讓我看起來不稱職(我可能是,但我不希望看起來像我)。而且,如果他們輸入像F1F2G%這樣的特殊字符,它也會陷入困境。另外,如果他們將框留空,它也會產生腳本錯誤。

我想避免這些錯誤。有誰知道一個好方法?

+0

您目前如何接受輸入?你現在在做什麼來驗證你的輸入? – sarnold

+0

你可以使用try/catch塊嗎? – jgritty

+0

輸入是字符串嗎? – Levon

回答

11
try: 
    val = int(hex_val, 16) 
except ValueError: 
    # Not a valid hex value 

if val > int("FFFFFF", 16): 
    # Value is too large 
+0

這樣做,也可以使用該值進行比較,如果不正確則引發手動異常。 – Amr

+0

+1我喜歡它比我的解決方案好:) – Levon

+0

因爲0xFFFFFF太主流了? – JBernardo

1

這是一個方法假設輸入的字符串:

import string 

def check_HEX(input): 
    for l in input: 
     if l not in string.hexdigits: 
      return False 
    return True 

給出:

print check_HEX('FFFFFF') # True 
print check_HEX('FFFZFF') # False 
print check_HEX(' ')  # False 
print check_HEX('F1F2G%') # False 
+0

red_decimal = HEXTOINT(紅色)。 green_decimal = hexToInt(綠色) blue_decimal = hexToInt(藍色) 這些值與此衝突,因爲我有Int而不是字符串。對不起,沒有指定。 –

1

您還可以使用正則表達式中的設施再。

val = val.upper() 
seeker = re.compile("^[0-9A-F]{1,6}$") 

if seeker.search(val): 
    hexCode = int(val, 16) 
    # process a good value 
else: 
    #bail 
+0

搜索器= re.compile([^ 0-9A-F] {1,6} $) ^ SyntaxError:無效的語法 這是我從中得到的錯誤? –

+0

插入忘記的引號。 – ncmathsadist