假設我有一個連續運行的程序,正在等待具有標準輸入的程序的順序。一直等待訂單的方法稱爲「運行」。如何捕捉錯誤並寫入strerr讓程序中斷
http://oi58.tinypic.com/4fx1tu.jpg
正如你看到的,運行()獲取一定的順序時,他們通過以某些功能。
當我運行該程序,每次我給這可能會導致錯誤的命令(比如:索引錯誤),它打破和關閉(顯然)
我決定嘗試捕獲錯誤與try/except
def a(order):
try:
<some algorithm>
return something
except Exception, error:
stderr.write(error)
stderr.flush()
def b(order):
try:
<some algorithm>
return something
except Exception, error:
stderr.write(error)
stderr.flush()
def run(order)
while stdin.notclosed:
try:
read stdin
if stdin==specific order :
x=a(stdin order)
else:
x=b(stdin order)
except Exception,error:
stderr.write(error)
stderr.flush()
run()
但是,看起來命令的程序看不到錯誤。從我的分析師看來,只有在讀取訂單的程序結束後,才下達訂單的程序開始讀取stderr
。但是,由於try/catch
,程序永遠不會結束。無論如何,要抓住錯誤,寫下它,然後結束它。 (錯誤可能來自任何函數)
PS:假設您不能修改或讀取發出命令的程序。 (這是競爭,我說這個的原因是因爲當我訪問stderr
時,它是空的。)
要捕獲錯誤並停止執行或你想捕捉它的功能造成的錯誤,並停止執行。 – Anurag
你可以運行這個程序每個訂單一次(擺脫'while'),因此給你的不可觸摸的父母有機會每次讀'stderr'嗎?你的父母是否閱讀'stdout',或者是否與'stderr'相同?如果不是,它在觀看文件嗎?它如何期望被通知錯誤? – slezica
您可以用'raise'語句結束'except'套件來重新引發最後一個活動的異常。 – martineau