在我的python服務器代碼中,我將所有參數作爲字符串獲取。我不瞭解這個論點的原始類型。如何在Python中檢測並將字符串轉換爲正確類型
例如, 如果實際值爲整數10,則如果實際值爲字符串「apple」,則接收到的參數爲字符串值'10' 。收到的參數是不變的字符串「蘋果」 如果實際值是漂浮10.0,收到的參數是字符串值'10 0.0'
什麼是檢測正確的參數類型和投他們回到最好的辦法「 int'在第一個例子中,'string'在第二個例子中,'float'在第三個例子中?
在我的python服務器代碼中,我將所有參數作爲字符串獲取。我不瞭解這個論點的原始類型。如何在Python中檢測並將字符串轉換爲正確類型
例如, 如果實際值爲整數10,則如果實際值爲字符串「apple」,則接收到的參數爲字符串值'10' 。收到的參數是不變的字符串「蘋果」 如果實際值是漂浮10.0,收到的參數是字符串值'10 0.0'
什麼是檢測正確的參數類型和投他們回到最好的辦法「 int'在第一個例子中,'string'在第二個例子中,'float'在第三個例子中?
理想情況下,您希望修復客戶端代碼,以便它不會丟棄類型信息。或者,如果你不能這樣做,你至少想知道這些字符串是如何生成的規則,所以你可以研究如何反轉規則。
但如果沒有那些是可能的,你需要猜測,一種可能是這樣的:
def parseval(s):
try:
return int(s)
except ValueError:
pass
try:
return float(s)
except ValueError:
pass
return s
這將把任何可能是一個有效的int
爲int
,什麼這不可能是有效的int
,但可以是有效的float
作爲float
,以及其他任何作爲str
。
在輸出來自打電話只是在Python repr
或str
的特殊情況下,你可能希望這樣的:
import ast
def parseval(s):
try:
return ast.literal_eval(s)
except ValueError:
return s
這將轉換任何Python的文字,或由任何集合顯示文字和其他收集顯示由遞歸等組成,以原始價值,但留下任何其他東西本身。 (如果您知道客戶端使用的是repr
而不是str
,則應該忽略try
/except
但如果它使用的是str
,這是有效的,因爲它依賴於以下事實:對於字符串的每種類型,str
是可解釋爲repr
)
但是,請注意,這使得它不可能,例如,發送字符串"10"
到您的服務器。