2012-12-10 68 views
0

我寫了一個函數,需要做3次檢查,如果其中一個測試失敗,它應該返回LookupError類型的異常,但它不起作用。 (* verify_checksum是另一種功能)如何返回異常?

def check_datagram(datagram, src_comp, dst_app): 
    try: 
     src_comp==datagram[0:16] 
    except LookupError: 
     return "Mismatch in src_comp" 
    try: 
     dst_app==datagram[40:48] 
    except LookupError: 
     return "Mismatch in dst_app" 
    try: 
     verify_checksum(datagram) 
    except False: 
     return "Wrong checksum" 
    return True 

例如:

輸入:

check_datagram("1111000000001111000011111111000001010101101010101111111111111111000000001111111100000000","0000111100001111", "11110000") 

預期輸出:

"Mismatch in dst_app" 

回答

3
def check_datagram(datagram, src_comp, dst_app): 
    if src_comp != datagram[0:16]: 
     raise LookupError("Mismatch in src_comp") 
    if dst_app != datagram[40:48]: 
     raise LookupError("Mismatch in dst_app") 
    if not verify_checksum(datagram): 
     raise LookupError("Wrong checksum") 
    return True # redundant? 
+0

tnx!所以我不需要使用「嘗試」? – user1816377

+0

@ user1816377:你沒有。我們的想法是進行驗證,如果有任何錯誤,則引發'LookupError'。 – NPE

+1

@ user1816377'try' /'except'用於捕捉錯誤--' raise'用於引發錯誤。 –

0

與NPE的答案建設你應該使用try..except那裏你會使用聲明的check_datagram()函數。

#python3 
try: 
    check_datagram(a,b,c) 
except LookupError as e: 
    print(str(e)) 

這可以讓你從引發的錯誤中得到消息。