You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Domino's Pizza API时,为何Python提示传入6个位置参数(实际仅传5个)

问题:调用Domino's Pizza API时的参数错误

我正在开发一个调用Domino's Pizza API的程序,想用用户输入替代硬编码的客户数据,写了这段代码:

from pizzapi import Customer
address = input("Street Address: ") + ', ' + input('City: ') + ', ' + input('State Abbreviation: ') + ', ' + input('5-Digit Zip Code: ')
customer = Customer(input('First Name: '), input('Last Name: '), input('Email: '), input('Phone Number: '), str(address))
print(customer)

运行时出现以下错误:

customer = Customer(input('First Name: '), input('Last Name: '), input('Email: '), input('Phone Number: '), str(address))
TypeError: Customer.__init__() takes from 1 to 5 positional arguments but 6 were given

我明明只传入了5个参数,为何会出现这个错误?如何解决?

补充:我自己实现的Customer类代码如下:

class Customer:
    """The Customer who orders a pizza."""

    def __init__(self, fname='', lname='', email='', phone='', address=None):
        self.first_name = fname.strip()
        self.last_name = lname.strip()
        self.email = email.strip()
        self.phone = str(phone).strip()
        self.str_address = address
        self.address = Address(*address.split(','))

    def save(self, filename="customers/customer1.json"):
        """
        saves the current customer to a .json file for loading later
        """
        if not filename.startswith("customers"):
            filename = "customers/" + filename
        json_dict = {"first_name": self.first_name,
             "last_name": self.last_name,
             "email": self.email,
             "phone": self.phone,
             "address": self.str_address}

        with open(filename, "w") as f:
            json.dump(json_dict, f)

    @staticmethod
    def load(filename):
        """
        load and return a new customer object from a json file
        """
        with open(filename, "r") as f:
            data = json.load(f)

            customer = Customer(data["first_name"], 
                                data["last_name"],
                                data["email"],
                                data["phone"],
                                data["address"])
        return customer

    def __repr__(self):
        return "Name: {} {}\nEmail: {}\nPhone: {}\nAddress: {}".format(
            self.first_name,
            self.last_name,
            self.email,
            self.phone,
            self.address,
        )

错误原因

这个看似矛盾的错误,大概率是以下两种情况之一:

  1. 类导入冲突:你的代码开头导入了pizzapi库的Customer类,但又自己实现了同名类。如果运行时实际加载的是库中的Customer类,而该类的构造函数参数数量和你自己写的不一致(比如库中的类不需要单独的address参数,而是要求传入拆分后的街道、城市等独立参数),就会导致你传入5个参数时超出了库中方法的参数上限。

  2. Address类参数错误的误报:看你自己写的Customer类构造函数,里面用*address.split(',')把地址字符串按逗号拆分后传给Address类。如果用户输入的街道地址本身包含逗号(比如123 Main St, Apt 4B),拆分后会得到超过4个元素,此时调用Address类时传入的参数数量就会超过它的要求,而Python的错误栈会指向Customer的实例化行,让你误以为是Customer的参数问题。

解决方法

针对两种情况分别处理:

情况1:解决类导入冲突

如果你想使用自己实现的Customer类,删除代码开头的from pizzapi import Customer语句,确保运行时加载的是你自己写的版本。

情况2:修复Address类参数问题

最稳妥的方式是直接收集地址各部分并创建Address对象,避免拼接字符串后拆分的风险:

from pizzapi import Address  # 确保导入Address类

# 分别收集地址信息
street = input("Street Address: ")
city = input('City: ')
state = input('State Abbreviation: ')
zip_code = input('5-Digit Zip Code: ')

# 直接创建Address对象
address = Address(street, city, state, zip_code)

# 创建Customer时传入Address对象
customer = Customer(
    input('First Name: '),
    input('Last Name: '),
    input('Email: '),
    input('Phone Number: '),
    address
)
print(customer)

同时修改你自己的Customer类构造函数,直接接收Address对象:

class Customer:
    """The Customer who orders a pizza."""

    def __init__(self, fname='', lname='', email='', phone='', address=None):
        self.first_name = fname.strip()
        self.last_name = lname.strip()
        self.email = email.strip()
        self.phone = str(phone).strip()
        self.address = address  # 直接赋值Address对象
        # 生成字符串格式的地址用于序列化
        self.str_address = f"{address.street}, {address.city}, {address.state}, {address.zip}"

    # 其他方法保持不变

如果坚持用字符串拼接的方式,需要先清理用户输入中的逗号:

# 替换街道地址中的逗号,避免拆分出错
street = input("Street Address: ").replace(',', '')
address = f"{street}, {input('City: ')}, {input('State Abbreviation: ')}, {input('5-Digit Zip Code: ')}"

内容的提问来源于stack exchange,提问作者VulnerabilityVigilante

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 15:15:10