【问题标题】:Returning the function that called this function返回调用此函数的函数
【发布时间】:2011-06-25 10:05:30
【问题描述】:

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

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

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

【问题讨论】:

  • 这是一个错误的想法。为什么你认为你需要这个?几乎可以肯定有更好(不那么老套)的方法。
  • 这似乎方式太复杂了。

标签: python function return


【解决方案1】:

隐式调用调用函数必然会导致无限循环、错误(除非您绝对确定所有调用错误的方法都是幂等的,即使过早中止也是如此)、混乱和完全不符合 Python 标准。您正在寻找的只是常规错误处理:

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带给你的。

【讨论】:

  • 我想让它更具体。因此,当要求用户以适当的格式输入某些数据时,如果正确,则该功能会继续执行,但当另一个功能具有相同的要求时,如果没有满足,则只需调用该功能即可error() 的错误信息。
【解决方案2】:

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

import inspect

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

def baz():
    foo()

baz() # prints <function baz at 0x0...>

【讨论】:

  • 好的。我仍然有些困惑,但我可能会选择另一种方式来做。无论如何,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-12
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多