如何防止在 .get(true , false) 语句中出现日志警告,即使它是 true 而不是 false

how to prevent logging warning in a .get(true , false) statement to appear even though it is true and not false

我正在制作一个很少使用终端进行输出的应用程序。所以,我发现日志库是帮助调试错误代码的好方法,正如打印语句所假设的那样。

但是,对于这段代码,特别是底部的 .get() 语句...

def process_variables(self, argument):
    data = pd.read_excel(self.url, sheet_name=self.sheet)
    data = pd.concat([data.iloc[2:102], data.iloc[107:157]]).reset_index()
    fb = data.loc[0:99, :].reset_index()
    nfb = data.loc[100:155, :].reset_index()

    return {'fb': data.loc[0:99, :].reset_index(),
            'nfb': data.loc[100:155, :].reset_index(),

            'bi': data.loc[np.where(data['Unnamed: 24'] != ' ')],
            'uni': data.loc[np.where(data['Unnamed: 25'] != ' ')],

            'fb_bi': fb.loc[np.where(fb['Unnamed: 24'] != ' ')],
            'fb_uni': fb.loc[np.where(fb['Unnamed: 25'] != ' ')],

            'nfb_bi': nfb.loc[np.where(nfb['Unnamed: 24'] != ' ')],
            'nfb_uni': nfb.loc[np.where(nfb['Unnamed: 25'] != ' ')],
            }.get(argument, f"{logging.warning(f'{argument} not found in specified variables')}") 

...return这是...

output

输出 return 是默认参数,即使 switch-case 参数是成功的,因为它确实 return pandas 数据框。

那么我怎样才能让它只在找不到时出现,如果它只是一个字符串而不是一个日志记录字符串方法,它应该出现。

提前感谢您的帮助:)

Python 在调用函数之前计算函数参数的参数。这就是为什么无论 get() 的结果如何,都会调用您的日志记录函数。另一件事是你的 f-string 可能每次都会评估 "None" 因为 logging.warning() 没有 return 任何东西,这看起来不像你想要的那样。你应该只用像

这样的常规 if 语句来处理这个问题
variables = {
    'fb': data.loc[0:99, :].reset_index(),
    ...
}
if argument in variables:
    return variables[argument]
else:
    logging.warning(f'{argument} not found in specified variables')