2014-04-05 28 views
0

我正在嘗試編寫一個函數,該函數將字符串轉換爲整數,並捕獲任何不是數字的內容並返回SyntaxError。如果字符串中的所有字符都是數字,則此處的try應該接受一個字符串並返回一個整數。 (sti)的示例值將是12a34。異常處理,嘗試將字符串轉換爲整數的函數

def string2int(sti): 
    try: 
     int(float(sti)) 
     if sti.isdigit(): 
      return sti 
    except Exception, e: 
     raise SyntaxError('not an integer') 

試圖熨平它在Python可視化給了我一個屬性錯誤在第4行: AttributeError的:「浮動」對象有沒有屬性「ISDIGIT」

有一個是all_digits功能,我可以使用它接受一個字符串,如果字符串的所有字符都是數字,則返回True,否則返回False,但我還沒有能夠嘗試使用該字符串。

如何寫這個,如果字符串確實表示一個正整數,那麼返回該整數?

回答

1
def string2int(sti): 
    try: 
     return int(sti) 
    except ValueError: 
     raise SyntaxError('not an integer') 

或者:

def string2int(sti): 
    if sti.isdigit(): 
     return int(sti) 
    else: 
     raise SyntaxError('not an integer') 
+0

這兩項工作。我敢肯定,我嘗試了許多幾乎完全相同的東西,關於這個嘗試:除了:一定是把我扔了。謝謝你的更正! – exclamationmark1

0

在你的函數,如果sti是一個整數,這應該只是工作,只是定期整數像123甚至沒有「+1」或「1E2」:

def string2int(sti): 
    try: 
     if sti.isdigit(): 
      return sti 

所以,你可以使用正則表達式:

import re 
matchInt = re.match("^\+?[0-9]+([eE][0-9]+)?$",sti) 
if matchInt: 
    return sti 

該正則表達式與所有定期顯示的或以科學計數法顯示的正整數相匹配。