繁体   English   中英

python基本尝试捕获异常

[英]python basic try catch exception

我写了一个代码,它转储从串行端口收集的数字,内容如下:

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部分)(如果它不是正确的数字),则跳过该读数并继续(读取其他数据)。 我怎样才能做到这一点 ?

感谢帮助

标准的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()

另外,您可以添加elsefinally

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

您应该捕获正在引发的特定异常,在这种情况下为ValueError:

try:
    temparrayforx.append(int(splitted[0]))
except ValueError as e:
    print e

捕获特定的错误类型很重要,这样您就不会意外捕获很多意外错误-例如,如果splitd为空,则会引发IndexError。 裸露的'except:'或'except Exception:'会对您隐藏。

在您的情况下,由于您想捕获几个不同的错误情况(行没有足够的部分,值不是数字),您可以在相同的except子句中捕获两个异常类型,也可以捕获两个不同的except子句-例如,如果您需要针对每个问题做不同的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM