我试图从函数 int_err() 和 int_err() 从 Msg() 调用函数 Msg()

问题描述

我正在编写一个 Error 类(为了清楚起见,省略了类的内容)。它需要能够在使用错误参数调用时发出错误消息。我使用 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')

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

解决方法

我发现我可以通过在 int_err = None 之前添加 def Msg(),将 def int_err() 更改为 def int_err_prime(),然后在 def 后面加上 {{ 1}}e.

int_err = int_err_prim

现在 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() 调用之前包含正确的函数地址。