[英]How do I get the method that my exception was raised in?
我有各種錯誤檢查方法,它們主要是值或類型檢查,我想給用戶一個機會來修復它,這樣他們就不會丟失一堆關於程序正在做什么的信息。
在這一點上,我只有這個:
def foo(Option1, Option2):
if Option1 >= 0 and Option <= 100 :
continue
else:
e = ('Hey this thing doesn\'t work')
raise ValueError(e)
然后在調用它的程序中,我有
except ValueError as e:
print(e)
我想傳遞問題的方法是什么,這樣我就可以給用戶一個機會再試一次,比如提示或者在print(e)語句所在的地方之后。 有任何想法嗎?
編輯:
基本上我想我的除了代碼看起來像這樣
except ValueError as e:
# print the error
# get what method the error was raised in
# method = the_method_from_above
# prompt user for new value
# send command to the method using the new value
您可以使用traceback模塊提供有關異常的堆棧跟蹤信息。
import traceback
...
try:
pass
except ValueError as e:
print("Error {0}".format(e))
traceback.print_exc()
你可以通過一些內省來做到這一點,但你不應該這樣做 。
下面的代碼將允許您調用引發異常的函數,但幾乎可以肯定有更好的方法來執行您正在嘗試實現的任何內容...
import sys
def foo(x):
print('foo(%r)' % x)
if not (0 <= x <= 100):
raise ValueError
def main():
try:
foo(-1)
except ValueError:
tb = sys.exc_info()[2]
while tb.tb_next is not None:
tb = tb.tb_next
funcname = tb.tb_frame.f_code.co_name
func = globals()[funcname]
func(50)
if __name__ == '__main__':
main()
......打印出......
foo(-1)
foo(50)
這一切都在很大程度上取決於代碼的其余部分。 對於您想要實現的目標,沒有簡單的解決方案。 為此,您不僅要存儲函數引用,還要存儲應用程序的當前狀態。 如果您的程序循環處理信息,您可以使用以下內容:
while XXX:
try:
o1, o2 = get_user_input_somehow(...)
foo(o1, o2)
except ValueError as e:
print "Error:",e
print "Please try again"
你想要Python稱之為追溯的東西 。 此標准功能允許異常的接收者看到它被拋出的調用堆棧。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.