python - 类方法采用 1 个位置参数,但给出了 2 个

标签 python selenium dictionary keyword-argument

我已经阅读了几个有类似问题的主题,但我不明白在我的情况下会抛出错误。

我有一个类方法:

def submit_new_account_form(self, **credentials):
...

当我像这样在我的对象实例上调用它时:

create_new_account = loginpage.submit_new_account_form(
            {'first_name': 'Test', 'last_name': 'Test', 'phone_or_email':
              temp_email, 'newpass': '1q2w3e4r5t',
             'sex': 'male'})

我收到此错误:

line 22, in test_new_account_succes
    'sex': 'male'})
TypeError: submit_new_account_form() takes 1 positional argument but 2 were       
given

最佳答案

这是合乎逻辑的:**credentials 意味着您将为其提供命名 参数。但是您没有为字典提供名称。

这里有两种可能:

  1. 您将 credentials 用作单个参数,并将字典传递给它,例如:

    def submit_new_account_form(self, credentials):
        # ...
        pass
    
    loginpage.submit_new_account_form({'first_name': 'Test', 'last_name': 'Test', 'phone_or_email': temp_email, 'newpass': '1q2w3e4r5t', 'sex': 'male'})
    
  2. 通过在前面放置两个星号来将字典作为命名参数传递:

    def submit_new_account_form(self, **credentials):
        # ...
        pass
    
    loginpage.submit_new_account_form(**{'first_name': 'Test', 'last_name': 'Test', 'phone_or_email': temp_email, 'newpass': '1q2w3e4r5t', 'sex': 'male'})
    

第二种方法等于传递命名参数,例如:

loginpage.submit_new_account_form(first_name='Test', last_name='Test', phone_or_email=temp_email, newpass='1q2w3e4r5t', sex='male')

我认为调用它的最后一种方法是更简洁的语法。此外,它允许您轻松修改 submit_new_account_form 函数签名的签名以立即捕获某些参数,而不是将它们包装到字典中。

关于python - 类方法采用 1 个位置参数,但给出了 2 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46713685/

相关文章:

python - 反转默认字典

python - 日志记录和电子邮件不适用于 Django for 500

python - Twisted 的 Serialport 和消失的串口设备

python - 使用python将一个字符串拆分成它的句子

selenium - 如何使用 Phantomjs 在 Selenium 中打开网站

c - 为什么这会在一个系统上给我带来段错误,而在另一个系统上却不会?

python - 我如何仅选择/格式化字典中的值到列表或 numpy 数组中?

python - 在 RedShift 中使用 Django 多数据库

javascript - 在 Selenium Python 中处理警报

selenium - Phantomjs session 隔离仍然不起作用吗?