返回调用此函数的函数

时间:2011-06-25 10:05:31

标签: python function return

好的,所以,我正在编写一个Python(v2.7)代码,其中包含一个显示错误消息的函数。但是还有一些其他函数依赖于这个原始的错误检查功能。

现在,当调用此错误检查函数时,如果出现错误,我希望显示错误,并调用调用此错误函数的函数。

示例,如果error()调用function1()并且没有错误,error()函数将不会执行任何重要操作。现在,function1()调用function2()。当function2()调用error()函数时,它会检测到错误,显示错误消息,然后再次调用function2()。这是我想要做的,但我不知道如何再次返回调用函数。

2 个答案:

答案 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...>