簡而言之,如果我有:
str_type = "int"
to_check = 1
實施以下檢查的最佳方法是什么?
if isinstance(to_check, str_type):
...
更詳細:
我想使用一個 JSON 檔案給出的型別資訊來檢查另一個 JSON 檔案的值。
所以如果我有template.json:
{
"param1": "int",
"param2": "bool"
}
和with_values.json:
{
"param1": 2,
"param2": True
}
然后我想做這樣的檢查:
if isinstance(with_values["param1"], template["param1"]):
...
此代碼失敗,因為第二個引數isinstance()必須是型別物件,而不是提供的字串。
從我的搜索中,我看到了一些選項,例如:
template.json從使用字典轉換“型別字串” :
TYPES = {
'int' : int,
'str' : str,
...
}
if isinstance(with_values["param1"], TYPES[template["param1"]]):
或使用 eval (應該不鼓勵但在這種情況下足夠安全?):
if isinstance(with_values["param1"], eval(template["param1"]):
或者我可以用原型值替換“型別字串”:
{
"param1": 0,
"param2": True
}
if isinstance(with_values["param1"], type(template["param1"]): # or type() is/== type()
也有pydoc.locate,但似乎不適合為此目的使用檔案模塊。(另外,我找不到這個函式的參考資料,或者真的找不到任何廣泛的檔案pydoc。我錯過了什么嗎?)
或者也許有更好的解決方案可用。那么解決這個問題的最 Pythonic(或者只是根據一般原則最好)的方法是什么?(讓我們假設只有內置型別,但如果解決方案針對自定義型別發生更改,那么最好將其包含在內以保持完整性。)
uj5u.com熱心網友回復:
我認為最好的解決方案是構建一個字串值與型別對應的字典。然后我們可以使用構建一個簡單的函式來檢查它
def check_types(value, expected_type: str):
types = {
"int": int,
"str": str,
"float": float
}
return isinstance(value, types[expected_type])
print(check_types(1, "int"))
如果您想專門檢查型別而不是子類(例如布林值表示為整數)。使用以下代碼將回傳布林值是否為整數False
def check_types(value, expected_type: str):
types = {
"bool": bool,
"int": int,
"str": str,
"float": float
}
return type(value) == types[expected_type]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/532652.html
上一篇:接受錯誤值的HTML輸入模式
