2015-06-15 45 views
0

在Python中,是否可以測試代碼塊中的錯誤,如果出現錯誤,請執行下列操作;如果沒有,做一些其他的事情?如果一段代碼產生錯誤,請執行x;如果沒有,請執行y(Python)

的僞代碼看起來像

checkError: 
    print("foobar" + 123) 
succeed: 
    print("The block of code works!") 
fail: 
    print("The block of code does not work!") 

這當然不能每一次;這種技術將與變量一起使用。

的要對這個可能是有代碼的隔離塊,所以如果出現一個錯誤有另一種方式,其他代碼不斷去:

global example 
example = "failure" 
isolate: 
    print("foobar" + 123) 
    example = "success" 

if example == "success": 
    print("The block of code worked without errors.") 
elif example == "failure": 
    print("The block of code had an error and stopped prematurely") 
else: 
    print("???") 

同樣,這會失敗每次,並在應用程序中,將與變量一起使用。

+1

是你可以使用try /除 –

+0

是的,這正是我一直在尋找。謝謝。 – Quelklef

回答

3

聽起來你正在尋找exceptions

https://docs.python.org/2/tutorial/errors.html

# checkError: becomes 
try 
    # some test 
    if x > 0: 
     raise AssertionError("Something failed...") 
    print("The block of code works!") 
except: 
    print("The block of code does not work!") 

類似的東西

+0

這是完美的!當等待時間用完時將接受答案。 – Quelklef

0

取決於你在做什麼,你可能會考慮嘗試/除塊。您的代碼會是這個樣子:

try: 
    do_something() 
    handle_success() 
except: 
    handle_failure() 

在這種情況下,當一個異常do_something()通話過程中被拋出handle_failure()將被調用。

如果你的代碼沒有拋出異常,你將需要返回一個結果可以在運行時檢查的值。布爾返回值可能如下所示:

if do_something(): 
    success() 
else: 
    failure() 

根據函數返回的內容,if/else可能看起來不同。

1

你想一個try/except和捕捉任何特定的錯誤/錯誤可能發生:「代碼塊作品」

def test(a,b): 
    try: 
     res = a/b 
     print(res) 
     print("The block of code works!") 
    except ZeroDivisionError: 
     print("The block of code does not work!") 

如果沒有異常,你會看到水庫,如果有你會看到「代碼塊不工作!」:

In [26]: test(10,2) 
5 
The block of code works! 

In [27]: test(10,0) 
The block of code does not work! 

你不想抓住每一個例外,唯一的缺點無論你希望可以在預期發生塊,裸露只是從來都不是通常好主意。

你能趕上多個異常:

def test(a,b): 
    try: 
     res = a/b 
     print(res) 
     print("The block of code works!") 
    except (ZeroDivisionError, TypeError): 
     print("The block of code does not work!") 

In [34]: test(10,2) 
5 
The block of code works! 

In [35]: test(10,0) # ZeroDivisionError 
The block of code does not work! 

In [36]: test(10,"foo") # TypeError 
The block of code does not work! 
相關問題