python基本try catch异常

2024-09-30 01:33:52 发布

您现在位置:Python中文网/ 问答频道 /正文

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

readoff = ser.readline()

正确的读数格式如下:

^{pr2}$

然后,为了进行一些计算,我把它分成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部分)(如果不是正确的数字),跳过读数继续(读取另一个数据)。我怎么能做到呢?在

谢谢你的帮助


Tags: 端口代码readline格式数字整数serint
2条回答

您应该捕获正在引发的特定异常,在本例中为ValueError:

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

捕获特定的错误类型很重要,这样您就不会意外地捕获到大量意外错误—例如,如果splitted为空,则会引发索引错误。一个简单的“except:”或“except Exception:”将对您隐藏这一点。在

在您的例子中,由于您想要捕获两个不同的错误情况(行没有足够的部分,值不是一个数字),您可以在同一个except子句中捕获两个异常类型,或者有两个不同的except子句-例如,如果您需要对每个问题执行不同的操作。在

标准的python try-catch是:

try:
    do_something_risky()

except ExceptionName as exc:
    do_something_else()

指定要捕获的异常非常重要,否则可能会捕捉到意外的异常,这些异常会冒出,导致错误难以检测。在

您可以捕捉不同的异常,并以不同的方式对它们作出反应:

^{pr2}$

另外,您可以添加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

相关问题 更多 >

    热门问题