使用背景:
python是弱類型語言,因此在處理數據時,需要對數據進行計算,但數據中存在非數值類型時,容易導致程序運行報錯。基於此目的,編寫如下方法解決字符串類型向數值類型轉換。
具體實現:
1、需要知道是否可以轉換為一個數字;
2、需要處理數據是float類型或負數的數值類型情況;
from numbers import Number def is_number(num_str): """ 判斷數據是否為一個數字 :param num_str: 字符串對象 :return: """ """ 判斷數據是否為一個數字 :param num_str: 字符串對象 :return: 布爾值 True 是一個數字 False 不是一個數字 None 本就是數值類型 """ # 防止非字段類型類型輸入報錯 if isinstance(num_str, Number): return None elif not isinstance(num_str, str): return False if num_str.isdigit(): return True # 對Float類型的數字進行判斷 if num_str.count('.') == 1: num_str_list = num_str.split('.') left = num_str_list[0] right = num_str_list[1] if left.startswith('-') and left.count('-') == 1 and right.isdigit(): _left = left.split('-')[1] if _left.isdigit(): return True elif left.isdigit() and right.isdigit(): return True return False
3、需要考慮到數據本身就是數值類型
4、兼容其他未知傳入類型或字符串轉化失敗情況
def str_to_num(value, default=None, num_type=int): """ 將字符串類型轉化為數據類型 :param value: 需要轉化的值,不一定需要是字符串類型 :param default: 設置轉換失敗返回數值,默認原值 :param num_type: 設置轉換成的數據類型 :return: """ num_flag = is_number(value) if num_flag: return num_type(value) elif num_flag is None: return num_type(value) return value if default is None else default
使用案例:
def clear_list(list_data): for data in list_data: for value in data.keys(): data[value] = str_to_num(data.get(value))