问题描述
我正在编写一个 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()
调用之前包含正确的函数地址。