gpt4 book ai didi

python - python错误处理中的类型转换

转载 作者:太空宇宙 更新时间:2023-11-04 07:23:47 27 4
gpt4 key购买 nike

所以我正在阅读一个包含 2 列的文本文件

 foo, bar

所以我做了类似的事情

for each_line in f:
each_line = each_line.split(',')
foo = int(each_line[0])
bar = int(each_line[1]
foobar = FooBar(foo,bar)
foobar_list.append(foobar)

现在,有时 foo 或 bar 是空白的..因此不能被类型转换为 int..有没有一种方法,如果 foo 或 bar 是空的,我可以跳过这个功能

(没有附加到食物栏)但是循环剧照继续进行 ??

最佳答案

有几个地方这可能会失败,如果 each_line 没有足够的逗号,或者如果任一值不是数字(例如,空字符串)。在每种情况下,您都可以捕获错误并使用 continue 跳到 f 中的下一项:

for each_line in f:
try:
foo_line, bar_line = each_line.split(',')
except ValueError:
# "Too many/few values to unpack" meaning wrong number of commas!
continue
try:
foo, bar = int(foo_line), int(bar_line)
except ValueError:
# "invalid literal for int()" meaning it wasn't digits
continue
foobar = FooBar(foo,bar)
foobar_list.append(foobar)

我将其分解为两个独立的异常处理程序,因为它有两种不同的失败方式。你实际上可以像这样折叠它:

for each_line in f:
try:
foo_line, bar_line = each_line.split(',')
foo, bar = int(foo_line), int(bar_line)
except ValueError:
# there was invalid input.
continue
foobar = FooBar(foo,bar)
foobar_list.append(foobar)

因为这是同一个异常,而且它们发生得很近。就个人而言,我更喜欢前者,以明确指出有两种错误。你不应该做的是:

# !!! BAD !!!
for each_line in f:
try:
each_line = each_line.split(',')
foo = int(each_line[0])
bar = int(each_line[1]
foobar = FooBar(foo,bar)
foobar_list.append(foobar)
except ValueError:
continue

因为 FooBar() 甚至 foobar_list.append() 可能会失败,但异常处理程序可以吞下它;始终使 yoru 异常处理程序中的 try: 套件尽可能小,以便它们只捕获一个错误,并且很容易找到错误所在。

关于python - python错误处理中的类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10130154/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com