2 回答

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊
如果傳入的消息與要替換的消息匹配,您可以使用自定義函數(shù)unittest.mock.patch臨時(shí)覆蓋內(nèi)置print函數(shù),該函數(shù)使用原始函數(shù)打印所需的消息,或者按原樣打印消息:print
from unittest.mock import patch
def custom_print(s, *args, **kwargs):
orig_print("my customized error message" if s == "input invalid" else s, *args, **kwargs)
orig_print = print
def bar():
with patch('builtins.print', new=custom_print):
foo()
bar()

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個(gè)贊
你基本上是在一個(gè)很好的方式。你想要做的是raise一個(gè)異常foo,你可以在其中捕獲bar. 這是通過 raise 命令完成的,如下所示:
def foo():
try:
num = int( input("need an Integer") )
except ValueError:
raise Exception("input invalid")
def bar():
try:
foo()
except Exception as e:
print("my customized error message")
如果您現(xiàn)在執(zhí)行bar()并引發(fā)您的異常,您可以捕獲它bar()并打印另一條消息。如果要獲取原始消息,可以通過打印str(e).
添加回答
舉報(bào)