Python 方法的有效参数

Python 方法的有效参数,python,pandas,Python,Pandas,熊猫似乎忽略了额外的(无效的)参数。例如 import pandas as pd df=pd.read_excel('myfile.xlsx', some_dummy_param=True) 我期望(但没有得到)类似于 TypeError: __init__() got an unexpected keyword argument 'some_dummy_param' 问题是,由于没有错误,我认为“StruthUMyMyPARAM”是有效的。这当然不是意料之中的。有没有办法确保只向read\

熊猫似乎忽略了额外的(无效的)参数。例如

import pandas as pd
df=pd.read_excel('myfile.xlsx', some_dummy_param=True)
我期望(但没有得到)类似于

TypeError: __init__() got an unexpected keyword argument 'some_dummy_param'
问题是,由于没有错误,我认为“StruthUMyMyPARAM”是有效的。这当然不是意料之中的。有没有办法确保只向read\u excel方法传递有效参数?

没有,没有

关键字参数通常通过Pandas-through传递,它要么被转发,要么被视为
dict
。使用此
dict
的功能可以自由检查是否有他们期望的以外的键

你可以这样做:

def safe_read_excel(self, f_name, *args, **kwargs):
    # Check if kwargs contains wrong parameters
    if set(kwargs.keys()).difference(set(<expected keys>)): 
        raise ValueError(<some messagge>)
    return self.read_excel(f_name, *args, **kwargs)

pd.DataFrame.safe_read_excel = safe_read_excel
def safe_read_excel(self,f_name,*args,**kwargs):
#检查kwargs是否包含错误的参数
如果设置(kwargs.keys())。差异(设置()):
提升值错误()
返回self.read\u excel(f\u名称,*args,**kwargs)
pd.DataFrame.safe\u read\u excel=safe\u read\u excel
然而,这将

  • 为DataFrame创建非标准方法
  • 可能会因为不同版本的熊猫而中断
  • 不,不是真的

    关键字参数通常通过Pandas-through传递,它要么被转发,要么被视为
    dict
    。使用此
    dict
    的功能可以自由检查是否有他们期望的以外的键

    你可以这样做:

    def safe_read_excel(self, f_name, *args, **kwargs):
        # Check if kwargs contains wrong parameters
        if set(kwargs.keys()).difference(set(<expected keys>)): 
            raise ValueError(<some messagge>)
        return self.read_excel(f_name, *args, **kwargs)
    
    pd.DataFrame.safe_read_excel = safe_read_excel
    
    def safe_read_excel(self,f_name,*args,**kwargs):
    #检查kwargs是否包含错误的参数
    如果设置(kwargs.keys())。差异(设置()):
    提升值错误()
    返回self.read\u excel(f\u名称,*args,**kwargs)
    pd.DataFrame.safe\u read\u excel=safe\u read\u excel
    
    然而,这将

  • 为DataFrame创建非标准方法
  • 可能会因为不同版本的熊猫而中断

  • 是的,这不是一个需要解决的小问题<代码>pd.read_excel接受签名中的
    **kwargs
    。这意味着您可以随意传递任何关键字参数,因为
    read\u excel
    不需要使用任何关键字参数

    解决这个问题的一种方法是

  • 确定实际接受的关键字参数
    read\u excel
  • read\u excel
  • 根据(1)的结果筛选出无效参数
  • 将筛选的参数列表传递给函数
  • 要处理(1),可以使用
    inspect
    模块确定哪些参数
    pd.read\u excel
    接受。特别是,
    inspect.signature
    方法返回一个
    signature
    对象,您可以从中查询
    参数
    属性。这将返回一个
    mappingproxy
    (实际上是一个不可变的字典)

    步骤(3)涉及在关键点上执行设置的相交,然后仅从相交处重建新的参数列表

    valid_params = {k : params[k] for k in params.keys() & args.keys()}
    
    print(valid_params)
    {'io': 'myfile.xlsx'}
    

    这形成了有效的参数列表,是(4)的基础


    是的,这不是一个需要解决的小问题<代码>pd.read_excel接受签名中的
    **kwargs
    。这意味着您可以随意传递任何关键字参数,因为
    read\u excel
    不需要使用任何关键字参数

    解决这个问题的一种方法是

  • 确定实际接受的关键字参数
    read\u excel
  • read\u excel
  • 根据(1)的结果筛选出无效参数
  • 将筛选的参数列表传递给函数
  • 要处理(1),可以使用
    inspect
    模块确定哪些参数
    pd.read\u excel
    接受。特别是,
    inspect.signature
    方法返回一个
    signature
    对象,您可以从中查询
    参数
    属性。这将返回一个
    mappingproxy
    (实际上是一个不可变的字典)

    步骤(3)涉及在关键点上执行设置的相交,然后仅从相交处重建新的参数列表

    valid_params = {k : params[k] for k in params.keys() & args.keys()}
    
    print(valid_params)
    {'io': 'myfile.xlsx'}
    

    这形成了有效的参数列表,是(4)的基础


    您是否试图在pandas中的不同读取函数中使用相同的参数?pandas将关键字参数**kwds作为读取函数中的参数,这就是为什么它不会抛出错误的原因。您是否试图在pandas中的不同读取函数中使用相同的参数?pandas将关键字参数**kwds作为读取函数中的参数,这就是为什么它不会抛出错误的原因。
    df = pd.read_excel(**valid_params)