2014-11-25 25 views
1

在我的python服務器代碼中,我將所有參數作爲字符串獲取。我不瞭解這個論點的原始類型。如何在Python中檢測並將字符串轉換爲正確類型

例如, 如果實際值爲整數10,則如果實際值爲字符串「apple」,則接收到的參數爲字符串值'10' 。收到的參數是不變的字符串「蘋果」 如果實際值是漂浮10.0,收到的參數是字符串值'10 0.0'

什麼是檢測正確的參數類型和投他們回到最好的辦法「 int'在第一個例子中,'string'在第二個例子中,'float'在第三個例子中?

回答

3

理想情況下,您希望修復客戶端代碼,以便它不會丟棄類型信息。或者,如果你不能這樣做,你至少想知道這些字符串是如何生成的規則,所以你可以研究如何反轉規則。


但如果沒有那些是可能的,你需要猜測,一種可能是這樣的:

def parseval(s): 
    try: 
     return int(s) 
    except ValueError: 
     pass 
    try: 
     return float(s) 
    except ValueError: 
     pass 
    return s 

這將把任何可能是一個有效的intint,什麼這不可能是有效的int,但可以是有效的float作爲float,以及其他任何作爲str


在輸出來自打電話只是在Python reprstr的特殊情況下,你可能希望這樣的:

import ast 
def parseval(s): 
    try: 
     return ast.literal_eval(s) 
    except ValueError: 
     return s 

這將轉換任何Python的文字,或由任何集合顯示文字和其他收集顯示由遞歸等組成,以原始價值,但留下任何其他東西本身。 (如果您知道客戶端使用的是repr而不是str,則應該忽略try/except但如果它使用的是str,這是有效的,因爲它依賴於以下事實:對於字符串的每種類型,str是可解釋爲repr


但是,請注意,這使得它不可能,例如,發送字符串"10"到您的服務器。

相關問題