在我的 Maya Python 脚本中,我需要在实例化自己的参数之前检查是否传入了 Logger 参数。我怎么做?

In my Python script for Maya, I need to check if a Logger argument is being passed in before I instantiate my own. How do I do that?

我正在使用 Python 为 Maya 创建一个工具,我需要在实例化我自己的记录器之前检查是否传入了记录器。我该怎么做,我是否可以创建一个函数来专门处理日志记录?我想可能会有更高级别的,比如 Shotgun Maya。

# this is a global variable
LOGGER = logging.logger(etc etc)
 
def function(logger=LOGGER):

如果我理解正确你想做什么,习惯用法是为关键字参数分配一个假值,然后继续分配默认值(这里是全局变量)或你显式传递给函数的值:

LOGGER = ... # global instance
...
def f(..., logger=None):
    ...
    logger = logger if logger else LOGGER
    ...
...  
f(...)                              # uses LOGGER
f(..., logger=logging.logger(...))  # uses new instance

重要的是要注意,当你说 def f(..., var=something) 时,对 var 的赋值发生在编译时,所以如果你省略对假值的赋值并直接说 def f(..., logger=LOGGER) 你有两个问题 ① 如果 LOGGER 在编译时没有绑定你会出错 ② 如果在运行时你改变全局 LOGGER 你的函数将继续使用定义的 LOGGER在编译时。