我写了一个代码,它倾倒从串口收集的数字,如下所示:
readoff = ser.readline()
以及正确的读取格式如下:
a=' 213 -456 725'
然后进行转储并进行一些计算,我将它分成3部分并将它们转换为整数,如下所示:
splitted=readoff.split()
if len(splitted) == 3 :
temparrayforx.append(int(splitted[0]))
temparrayfory.append(int(splitted[1]))
temparrayforz.append(int(splitted[2]))
但有时从串口读取的内容如下:'2-264',它不能变成整数。或者有时读数不能被三个整除。
这是我的示例错误:
temparrayforx.append(int(splitted[0]))
ValueError: invalid literal for int() with base 10: '2-264'
我的目标是如果读数不正确(如果它不是3部分)(如果它不是正确的数字),跳过该读数并继续(读取另一个数据)。我怎样才能做到这一点 ?
感谢您的帮助
答案 0 :(得分:5)
标准的python try-catch是:
try:
do_something_risky()
except ExceptionName as exc:
do_something_else()
指定要捕获的异常非常重要,否则您可能会捕获应该冒出的不必要的异常,从而导致难以检测到错误。
您可以捕获不同的异常,并以不同的方式对它们做出反应:
try:
do_something_risky()
except SomeException as exc:
do_this()
except AnotherException as exc:
do_that()
此外,您可以添加else
和finally
try:
do_something_risky()
except ExceptionName, AnotherPossibleException as exc:
do_something_else()
else:
do_something_when_no_exception_raised()
finally:
# Useful for cleaning up
do_something_no_matter_what_happens()
try:
# Do the problematic thing
except ValueError as exc:
# Manage the exception
答案 1 :(得分:3)
您应该捕获正在引发的特定异常,在这种情况下为ValueError:
try:
temparrayforx.append(int(splitted[0]))
except ValueError as e:
print e
捕获特定的错误类型非常重要,这样您就不会意外地捕获大量意外错误 - 例如,如果splitted为空,则会引发IndexError。一个简单的'除了'或'除了例外:'会隐藏你的。
在您的情况下,由于您想捕获几个不同的错误情况(行没有足够的部分,值不是数字),您可以在同一个except子句中捕获这两种异常类型,或者有两种不同的错误情况除了从句 - 例如,如果你需要对每个问题做不同的事情。