尝试使用 try except 转换为数字
Trying to convert to numbers with try except
我正在尝试将多种类型列表中的项目转换为浮点数,以便
L = ["29.3", "tea", "1", None, 3.14]
会变成
D = [29.3, "tea", 1, None, 3.14]
我的尝试如下:
L = ["29.3", "tea", "1", None, 3.14]
D = []
for item in L:
try:
float(item)
D.append(item)
except ValueError:
D.append(item)
print(D)
这引发了一个
line 5, in <module>
float(item)
TypeError: float() argument must be a string or a number, not 'NoneType'` error.
如果我将 None
项更改为 "None"
中的字符串,它会生成一个与 L
相同的列表 D
。所以...
- 如何跳过
None
项?我必须使用 if item == None: pass
语句,还是有更好的方法?
- 为什么我将
None
更改为 "None"
类型转换仍然不起作用?
您可以直接在 try
块中进行追加:
代码:
try:
D.append(float(item))
except (ValueError, TypeError):
D.append(item)
测试代码:
L = ["29.3", "tea", "1", None, 3.14]
D = []
for item in L:
try:
D.append(float(item))
except (ValueError, TypeError):
D.append(item)
print(D)
结果:
[29.3, 'tea', 1.0, None, 3.14]
try-except
用于捕获异常。在这种情况下,您只考虑一个例外,ValueError
而不是 TypeError
。为了捕获类型错误,只需在 try
下面再放一个 except
块。在你的情况下,它会是这样的:
L = ["29.3", "tea", "1", None, 3.14]
D = []
for item in L:
try:
float(item)
D.append(float(item))
except TypeError:
# do something with None here
except ValueError:
D.append(item)
print(D)
鉴于您希望在单个 except
块中捕获多个异常,请使用异常元组:
L = ["29.3", "tea", "1", None, 3.14]
D = []
for item in L:
try:
float(item)
D.append(float(item))
except (ValueError, TypeError):
D.append(item)
print(D)
- 是的,您可以简单地使用
if item == None: pass
在转换前检查类型。
- 您可以使用
if isinstance(item, str): ...
将字符串显式转换为浮点数。
当 float
构造函数被赋予字符串或数字以外的其他内容时,它会引发 TypeError
而不是 ValueError
。你需要两者都抓住。
这是一种使用列表理解的方法。
def try_float(x):
try:
return float(x)
except (ValueError, TypeError):
return x
l = ["29.3", "tea", "1", None, 3.14]
d = [try_float(x) for x in l]
print(d) # [29.3, 'tea', 1.0, None, 3.14]
尝试排除错误,在最后一个案例中使用它们。因此,如果错误在 NoneType 中,您可以尝试使用 if var is type:
或 if is isinstance(var, type):
循环
在 bool (True/False) 等其他类型中,您应该使用 eval(var) 将它们转换为 bool。
L = ["29.3", "tea", "1", None, 3.14]
D = []
for item in L:
if item is None:
D.append(item)
pass
else:
try:
D.append(float(item))
except ValueError or TypeError:
D.append(item)
我正在尝试将多种类型列表中的项目转换为浮点数,以便
L = ["29.3", "tea", "1", None, 3.14]
会变成
D = [29.3, "tea", 1, None, 3.14]
我的尝试如下:
L = ["29.3", "tea", "1", None, 3.14]
D = []
for item in L:
try:
float(item)
D.append(item)
except ValueError:
D.append(item)
print(D)
这引发了一个
line 5, in <module> float(item) TypeError: float() argument must be a string or a number, not 'NoneType'` error.
如果我将 None
项更改为 "None"
中的字符串,它会生成一个与 L
相同的列表 D
。所以...
- 如何跳过
None
项?我必须使用if item == None: pass
语句,还是有更好的方法? - 为什么我将
None
更改为"None"
类型转换仍然不起作用?
您可以直接在 try
块中进行追加:
代码:
try:
D.append(float(item))
except (ValueError, TypeError):
D.append(item)
测试代码:
L = ["29.3", "tea", "1", None, 3.14]
D = []
for item in L:
try:
D.append(float(item))
except (ValueError, TypeError):
D.append(item)
print(D)
结果:
[29.3, 'tea', 1.0, None, 3.14]
try-except
用于捕获异常。在这种情况下,您只考虑一个例外,ValueError
而不是 TypeError
。为了捕获类型错误,只需在 try
下面再放一个 except
块。在你的情况下,它会是这样的:
L = ["29.3", "tea", "1", None, 3.14]
D = []
for item in L:
try:
float(item)
D.append(float(item))
except TypeError:
# do something with None here
except ValueError:
D.append(item)
print(D)
鉴于您希望在单个 except
块中捕获多个异常,请使用异常元组:
L = ["29.3", "tea", "1", None, 3.14]
D = []
for item in L:
try:
float(item)
D.append(float(item))
except (ValueError, TypeError):
D.append(item)
print(D)
- 是的,您可以简单地使用
if item == None: pass
在转换前检查类型。 - 您可以使用
if isinstance(item, str): ...
将字符串显式转换为浮点数。
当 float
构造函数被赋予字符串或数字以外的其他内容时,它会引发 TypeError
而不是 ValueError
。你需要两者都抓住。
这是一种使用列表理解的方法。
def try_float(x):
try:
return float(x)
except (ValueError, TypeError):
return x
l = ["29.3", "tea", "1", None, 3.14]
d = [try_float(x) for x in l]
print(d) # [29.3, 'tea', 1.0, None, 3.14]
尝试排除错误,在最后一个案例中使用它们。因此,如果错误在 NoneType 中,您可以尝试使用 if var is type:
或 if is isinstance(var, type):
循环
在 bool (True/False) 等其他类型中,您应该使用 eval(var) 将它们转换为 bool。
L = ["29.3", "tea", "1", None, 3.14]
D = []
for item in L:
if item is None:
D.append(item)
pass
else:
try:
D.append(float(item))
except ValueError or TypeError:
D.append(item)