方法一:使用type(eval())函数判断类型,再用try-except-else处理异常
1 def num_trans(): 2 """使用eval()函数判断""" 3 target = ['25',5,'a',1,2,'b',4,5,'A','python','3.6'] 4 target_out = [] 5 for i in target: 6 if type(i) == int or type(i) == float: 7 target_out.append(i) 8 else: 9 try: 10 type(eval(i)) == int or type(eval(i)) == float 11 except NameError: #str会报NameError 12 pass 13 except TypeError: #list,dict,set会报TypeError 14 pass 15 else: 16 target_out.append(i) 17 return target_out 18 19 print(num_trans())
方法二:直接用int()和float()判断,如果报错,则用try-except-else处理异常,符合条件的添加到列表中
1 def num_trans(): 2 """使用多重try-except-else判断,缺陷是代码冗余""" 3 target = ['25',5,'a',1,2,'b',4,5,'A','python','3.6'] 4 target_out = [] 5 for i in target: 6 if type(i) == int or type(i) == float: 7 target_out.append(i) 8 else: 9 try: 10 int(i) #判断是否为int 11 except ValueError: 12 try: 13 float(i) #判断是否为float 14 except ValueError: #str会报ValueError 15 pass 16 except TypeError: #list,dict,set会报TypeError 17 pass 18 else: 19 target_out.append(i) 20 except TypeError: 21 pass 22 else: 23 target_out.append(i) 24 return target_out 25 26 print(num_trans())
方法三:用isdigit判断是否为int,但是无法判断float,只能用float()加try-except来取float,添加到列表中
1 def num_trans(): 2 """使用isdigit和try-except-else组合判断""" 3 target = ['25',5,'a',1,2,'b',4,5,'A','python','3.6'] 4 target_out = [] 5 for i in target: 6 if type(i) == int or type(i) == float: 7 target_out.append(i) 8 elif i.isdigit == True: 9 target_out.append(i) 10 else: 11 try: 12 float(i) #判断是否为float 13 except ValueError: #str会报ValueError 14 pass 15 except TypeError: #list,dict,set会报TypeError 16 pass 17 else: 18 target_out.append(i) 19 return target_out 20 21 print(num_trans())
方法四,使用isdigit判断int,再造一个轮子(isfloat)来判断字符串是否能转为float。
1 def isfloat(f): #判断是否为float 2 if f.count('.') == 1: #判断只有一个小数点 3 n = f.replace('.','') #去除小数点 4 flag = n.isdigit #判断去除小数点是否为纯数字 5 if f[0] == '.': #首位不能是小数点 6 return False 7 if f[-1] == '.': #末位不能是小数点 8 return False 9 if flag: 10 return True 11 else: 12 return False 13 14 def getNumber(data): 15 newData = [] 16 for one in data: 17 cla = type(one) 18 if cla == int or cla == float: #判断是否为int或float 19 newData.append(one) 20 elif cla == str: 21 if one.isdigit(): #判断是否为int 22 newData.append(one) 23 elif isfloat(one): #判断是否为float 24 newData.append(one) 25 return newData 26 27 target = ['25',5,'a',1,2,'b',4,5,'A','python','3.6'] 28 print(getNumber(target))