【问题标题】:I'm trying to call function Msg() from function int_err() and int_err() from Msg()我正在尝试从函数 int_err() 调用函数 Msg() 并从 Msg() 调用 int_err()
【发布时间】:2021-02-22 02:30:21
【问题描述】:

我正在编写一个错误类(为清楚起见,省略了类的内容)。当使用错误参数调用它时,它需要能够发出错误消息。我使用Msg() 函数来保存用于处理消息的所有机制(例如,确定消息是否严重到导致终止并保持错误计数)。

def Msg(level, text)
    print('level' + '-' + text)
    if level == 'unknown':
        int_err(text)
    # ...
def info(text)
    # ...
    Msg('info', text)
def warn(text)
    # ...
    Msg('warn', text)
# . . .
def int_err(text)
    Msg('internal error', text)
    # ...

info('informational')
warn('warning')
Msg('unknown', 'erroneous call')

这会失败,因为从Msg() 调用它时未定义int_err()。如果我将def int_err() 移动到def Msg() 上方,那么从int_err() 调用时Msg() 未定义。

【问题讨论】:

    标签: python-3.x function circular-reference


    【解决方案1】:

    我发现我可以通过在def Msg() 之前添加int_err = None,将def int_err() 更改为def int_err_prime(),然后在def 之后添加int_err = int_err_prime 来解决此问题。

    int_err = None                         #<=====
    def Msg(level, text)
        print('level' + '-' + text)
        if level == 'unknown':
            int_err(text)
        # ...
    def info(text)
        # ...
        Msg('info', text)
    def warn(text)
        # ...
        Msg('warn', text)
    # . . .
    def int_err_prime(text=None)     #<=====+++ prototype need to be =None
        Msg('internal error', text)
        # ...
    int_err = int_err_prime                #<=====
    info('informational')
    warn('warning')
    Msg('unknown', 'erroneous call')
    

    现在int_err 是在Msg() 的定义之前定义的,并且在使用int_err = int_err_prime 调用它之前包含正确的函数地址。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-31
      • 2022-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多