Python 返回调用此函数的函数

Python 返回调用此函数的函数,python,function,return,Python,Function,Return,好的,我正在编写一个Python(v2.7)代码,其中包含一个显示错误消息的函数。但是还有一些其他函数依赖于这个原始的错误检查函数 现在,当调用这个错误检查函数时,如果有错误,我希望显示一个错误,并调用调用这个错误函数的函数 例如,如果error()由function1()调用,并且没有错误,error()函数将不起任何重要作用。现在,function1()调用function2()。当function2()调用error()函数时,它会检测到错误,显示错误消息,然后再次调用function2(

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

现在,当调用这个错误检查函数时,如果有错误,我希望显示一个错误,并调用调用这个错误函数的函数


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

隐式调用函数必然会导致无限循环、bug(除非您绝对确保所有调用error的方法都是幂等的,即使在过早中止时也是如此)、混乱和完全不和谐。您需要的只是常规的错误处理:

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
之类的通用名称,因此容易出错的行为不是一个好主意


这个答案是由。

隐式调用函数必然会导致无限循环、错误(除非您绝对确保所有调用错误的方法都是幂等的,即使在过早中止时)、混乱和完全不和谐的。您需要的只是常规的错误处理:

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
之类的通用名称,因此容易出错的行为不是一个好主意

这个答案是由。phinag正确地提到这是个坏主意。但如果您仍然需要它,
inspect
模块可以帮助您:

import inspect

def foo():
    print globals().get(inspect.stack()[1][3]

def baz():
    foo()

baz() # prints <function baz at 0x0...>
导入检查
def foo():
print globals().get(inspect.stack()[1][3]
def baz():
foo()
baz()#打印
phinag正确地提到了这是个坏主意。但如果您仍然需要它,
检查
模块可以帮助:

import inspect

def foo():
    print globals().get(inspect.stack()[1][3]

def baz():
    foo()

baz() # prints <function baz at 0x0...>
导入检查
def foo():
print globals().get(inspect.stack()[1][3]
def baz():
foo()
baz()#打印

这是一个坏主意。你为什么认为你需要这个?几乎可以肯定有一个更好(不太粗糙)的方法。这似乎太复杂了。这是一个坏主意。你为什么认为你需要这个?几乎可以肯定有一个更好(不太粗糙)的方法方式。这似乎太复杂了。我想让它更具体一些。因此,当要求用户以适当的格式输入某些数据,并且数据正确时,该函数将继续,但当另一个函数具有相同的要求时,如果没有满足,则只应调用该函数并返回错误()的错误消息。我想让它更具体一些。因此,当要求用户以适当的格式输入某些数据,并且数据正确时,该函数将继续,但当另一个函数具有相同的要求时,如果未满足该要求,则只应调用该函数并返回错误()的错误消息。好的。我仍然有一些困惑,但我可能会选择另一种方法。无论如何,谢谢。好的。我仍然有一些困惑,但我可能会选择另一种方法。无论如何,谢谢。