1
我正在編寫一個使用來自GDAL
的第三方模塊的Python腳本。發生錯誤時,GDAL
函數不會引發異常,但會將消息發送到stdout
。通常,使用GDAL
函數時發生的錯誤不能保證停止進程,並且我不需要知道發生的錯誤。截取來自第三方代碼的郵件
有沒有一種方法可以攔截正在發送到stdout
的消息,然後將它們打印在控制檯中?消息會干擾我在自己的代碼中提供的消息。
我正在編寫一個使用來自GDAL
的第三方模塊的Python腳本。發生錯誤時,GDAL
函數不會引發異常,但會將消息發送到stdout
。通常,使用GDAL
函數時發生的錯誤不能保證停止進程,並且我不需要知道發生的錯誤。截取來自第三方代碼的郵件
有沒有一種方法可以攔截正在發送到stdout
的消息,然後將它們打印在控制檯中?消息會干擾我在自己的代碼中提供的消息。
如"Python Gotchas"描述,您可以打開使用gdal.UseExceptions()
例外,如:
from osgeo import gdal
dsrc = gdal.Open('nonexist')
# ... silence
gdal.UseExceptions()
dsrc = gdal.Open('nonexist')
# Traceback (most recent call last):
# File "<interactive input>", line 1, in <module>
# RuntimeError: `nonexist' does not exist in the file system,
# and is not recognised as a supported dataset name.
你總是可以再使用try
except
塊獲得實際的錯誤消息字符串:
try:
dsrc = gdal.Open('nonexist')
except RuntimeError as e:
print(str(e))
這將打印出錯信息:
文件系統中不存在`nonexist', 並且不被識別爲受支持的數據集名稱。
我見過Python Gotchas並閱讀了'gdal.UseExceptions()'。我不清楚的是,是否會打開異常並關閉消息,還是會收到異常和消息? – Brian
基本上,它將stderr消息轉換爲RuntimeError異常,可以用任何您想要的方式處理它。 –