好的,所以,我正在编写一个Python(v2.7)代码,其中包含一个显示错误消息的函数。但是还有一些其他函数依赖于这个原始的错误检查功能。
现在,当调用此错误检查函数时,如果出现错误,我希望显示错误,并调用调用此错误函数的函数。
示例,如果error()
调用function1()
并且没有错误,error()
函数将不会执行任何重要操作。现在,function1()
调用function2()
。当function2()
调用error()
函数时,它会检测到错误,显示错误消息,然后再次调用function2()
。这是我想要做的,但我不知道如何再次返回调用函数。
答案 0 :(得分:4)
隐含地回想起调用函数必然会导致无限循环,错误(除非你绝对确定所有调用错误的方法都是幂等的,即使是过早中止),混乱和完全unpythonic无论如何。您正在寻找的只是常规错误处理:
def f2():
try:
1/0 # complicated code, potentially raising an error
except ZeroDivisionError: # Or BaseException, if you gotta catch them all
error()
# clean up, restore a consistent state
# go on, no matter whether the error occurred or did not
如果只是重试有帮助,你只需写出来:
def sometimes_fails():
1 / random.randint(0,1)
def f():
while True:
try:
sometimes_fails()
except ZeroDivisionError:
continue # try again
break # abort
使用像error
这样的通用名称来表示极不寻常,极其复杂(幂等)并因此容易出错的行为并不是一个好主意。
此答案由On Error Resume Next
提供给您。
答案 1 :(得分:3)
phinag 正确地提到这个坏主意。但如果您仍然需要它,inspect
模块可以提供帮助:
import inspect
def foo():
print globals().get(inspect.stack()[1][3]
def baz():
foo()
baz() # prints <function baz at 0x0...>