簡體   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