解决办法:
import pandas as pd
from functools import wraps
def isEmpty_df(func):
@wraps(func)
def wrapper(*args, **kwargs):
if len(args) > 0:
df = args[0]
else:
df = list(kwargs.values())[0]
if df.empty:
return 2 # 不执行func(df)
return func(*args, **kwargs)
return wrapper
@ isEmpty_df
def func(df: pd.DataFrame, other):
return 1
if __name__ == "__main__":
df = pd.DataFrame([1])
res = func(df, 1) # 只要保证df是传入的第一个自变量即可
print(res)
问题背景:
import pandas as pd
from functools import wraps
def isEmpty_df(func):
@wraps(func)
def wrapper(df):
if df.empty:
return 2 # 不执行func(df)
return func(df)
return wrapper
@ isEmpty_df
def func(df: pd.DataFrame, other):
return 1
if __name__ == "__main__":
df = pd.DataFrame()
res = func(df, other=1) # TypeError: func() takes 1 positional argument but 2 were given
print(res)
import pandas as pd
from functools import wraps
def isEmpty_df(func):
@wraps(func)
def wrapper(df):
if df.empty:
return 2 # 不执行func(df)
return func(df)
return wrapper
@ isEmpty_df
def func(df: pd.DataFrame, other):
return 1
if __name__ == "__main__":
df = pd.DataFrame() # 执行func
res = func(df) # 实际上是传到wrapper
print(res)
import pandas as pd
from functools import wraps
def isEmpty_df(func):
@wraps(func)
def wrapper(df):
if df.empty:
return 2 # 不执行func(df)
return func(df)
return wrapper
@ isEmpty_df
def func(df: pd.DataFrame, other):
return 1
if __name__ == "__main__":
df = pd.DataFrame([1])
res = func(df) # TypeError: func() missing 1 required positional argument: 'other'
print(res)