0
我正在使用execnet在python腳本中調用jython模塊。Python Execnet和異常處理
從docs:
注意,從遠程執行的代碼的異常將被重新拋出作爲包含遠程回溯的文本表示channel.RemoteError異常。
假設我的遠程模塊可能導致兩個不同的異常,我希望能夠以不同的方式處理每個異常。我將如何處理這個問題,因爲這兩個例外都會拋出只包含一個追溯字符串的RemoteError
異常?
例如,這個特殊的調用代碼:
#...
channel.send('bogus')
結果如下RemoteError
,其中只包含一個包含回溯的字符串的屬性formatted
:
RemoteError: Traceback (most recent call last):
File "<string>", line 1072, in executetask
File "<string>", line 1, in do_exec
File "<remote exec>", line 33, in <module>
IOError: Open failed for table: bogus, error: No such file or directory (2)
我不能做try ... except IOError:
。我可以做一個try ... except RemoteError as ex:
並解析ex.formatted
,看它是否含有IOError
,然後提高該相反,但這似乎是相當稀鬆:
from execnet.gateway_base import RemoteError
try:
channel.send('bogus')
except RemoteError as ex:
if 'IOError' in ex.formatted:
raise IOError(ex.formatted[ex.formatted.find('IOError'): -1])
if 'ValueError' in ex.formatted:
raise ValueError(ex.formatted[ex.formatted.find('ValueError'): -1])
# otherwise, reraise the uncaptured error:
raise ex