我已经创建了这个Python类,用于输入某些可以是新产品,二手产品或翻新产品的产品(通过.lower()
函数实现的不区分大小写)。条件参数的任何其他条目都应给出错误(ValueError),我希望代码继续进行下一行。
Random_Product_1
是第一个也是完美的新对象。没问题。我在下一个对象Random_Product_2
的条件上犯了故意错误。这应该打印ValueError
。它的确有,但也有其他错误内容。这导致代码停止在其轨道上。使对象(输入正确的条件值)的下一行代码根本不会运行。
我基本上是在尝试使错误条目(例如Random_Product_2
)的代码跳过到下一行代码。到目前为止,这是我的基本代码,一旦解决此问题,我计划在此基础上构建其他内容。
class Product:
def __init__(self, Id, price, inventory, condition):
self.condition = condition.lower()
if self.condition != "new" and self.condition != "used" and self.condition != "refurbished":
raise ValueError('condition can only be new or used or refurbished')
self.Id = Id
self.price = price
self.inventory = inventory
Random_Product_1 = Product('What_is_this', 50, 81, "Used") # defined perfectly
Random_Product_2 = Product('What_is_this', 50, 85, "Useed") # not defined at all, code doesn't go to next line
Random_Product_3 = Product('What_is_this', 500, 805, "Used") # This is not run
答案 0 :(得分:1)
如果我的理解正确,那么您选择引发一个异常,从而根本不创建具有非法值的实例,因此您以后不必再处理它。为什么不。但是,要使程序在引发异常后继续运行,您需要使用try
语句。让我们循环创建产品,并在此循环内仅使用一个try
语句:
class Product:
def __init__(self, Id, price, inventory, condition):
self.condition = condition.lower()
if self.condition not in ("new", "used", "refurbished"):
raise ValueError('condition can only be new or used or refurbished')
self.Id = Id
self.price = price
self.inventory = inventory
# special method for a more readable print()
def __repr__(self):
return "{}\t{}\t{}\t{}".format(self.Id, self.price, self.inventory, self.condition)
data = (('A', 50, 81, "Used"),
('B', 50, 85, "Useed"),
('C', 500, 805, "Used"))
product_list = []
for item in data:
try:
new_product = Product(*item)
except:
# do nothing with the exception
pass
else:
product_list.append(new_product)
# check if product 'B' exists
for item in product_list:
print(item)
输出:
A 50 81 used
C 500 805 used
答案 1 :(得分:0)
您的问题描述不准确:if
语句无法“跳至下一个条目”,因为该下一个条目是由调用程序而不是__init__
控制的。您可以在初始化程序中做的就是控制此 one 对象的设置。
根本问题是您说希望继续执行程序,但是您使用了特定中止程序的语言工具。很简单,您需要决定要选择哪一个。假设您希望尽可能顺利地完成当前初始化,请尝试以下操作:对照有效选择列表检查给定选择。如果不在该列表中,请发出一条简单消息并尽最大可能完成初始化。
def __init__(self, Id, price, inventory, condition):
valid_condition = ("new", "used", "refurbished")
self.condition = condition.lower()
if self.condition not in valid_condition:
print('condition can only be new or used or refurbished. ',
'Setting to "unknown"')
self.condition = "unknown"
self.Id = Id
self.price = price
self.inventory = inventory
您想要的效果吗?