0

製品在庫プログラムがあり、メニューファイルに製品の変更機能があります

def modify_product(self):
    id = input("Enter product id: ")
    type = input("Enter product type: ")
    price = input("Enter product price: ")
    quantity = input("Enter product quantity: ")
    description = input("Enter product description: ")
    if type:
        self.inventor.modify_type(id, type)
    if price:
        self.inventor.modify_price(id, price)    
    if quantity:
        self.inventor.modify_quantity(id, quantity)   
    if description:
        self.inventor.modify_description(id, description) 

エラーが発生しています:AttributeError: 'NoneType' object has no attribute 'type'

これが、inventor.py ファイル内の私の modify_type,price,quantity,description 関数です。

def modify_type(self, product_id, type=''):
    self._find_product(product_id).type = type

def modify_price(self, product_id, price):
    self._find_product(product.id).price = price

def modify_quantity(self, product_id, quantity):
    self._find_product(product.id).quantity = quantity

def modify_description(self, product_id, quantity):
    self._find_product(product.id).description = description

_find_product 関数は次のとおりです。

def _find_product(self, product_id):
    for product in self.products:
        if str(product.id) ==(product.id):
            return product
        return None
4

1 に答える 1

1

ループで正しい値をテストしていないため、self._find_product()呼び出しは を返します。None

str(product.id) againstproduct.id but against theproduct_id` 引数をテストしないでください:

if str(product.id) == product_id:

Noneあなたも早く帰ります。そのreturnステートメントは冗長です。削除してください。関数が , なしで終了する場合、returnデフォルトNoneで返されます:

def _find_product(self, product_id):
    for product in self.products:
        if str(product.id) == product_id:
            return product

これは次のように折りたたむことができます。

def _find_product(self, product_id):
    return next((p for p in self.products if str(p.id) == product_id), None)
于 2013-05-30T10:16:19.643 に答える