gpt4 book ai didi

python - 循环引用在哪里?

转载 作者:太空宇宙 更新时间:2023-11-04 03:43:06 25 4
gpt4 key购买 nike

我正在编写一些我想编码成 JSON 的 python 类。当我尝试对我的对象进行 jsonify 时,我收到一条错误消息,提示“循环引用”。我想我明白循环引用的含义,但我在我的代码中找不到任何示例。

对象之间的关系(has a/is a)

  • 注册有一个
  • 注册人有一个
  • 地址

代码(python):

class Address:
def __init__(self, address1, address2, city, state, zip):
self.address1 = address1
self.address2 = address2
self.city = city
self.state = state
self.zip = zip

class Signup:
def __init__(self, registrant, classId, date, time, paid, seatCost, notes, className, seats, groupId, agentName, agentCompany):
self.registrant = registrant
self.classId = classId
self.date = date
self.time = time
self.paid = paid
self.seatCost = seatCost
self.notes = notes
self.className = className
self.seats = seats
self.groupId = groupId
self.agentName = agentName
self.agentCompany = agentCompany

class Registrant:
def __init__(self, firstName, lastName, address, phone, email):
self.firstName = firstName
self.lastName = lastName
self.address = address
self.phone = phone
self.email = email

def scrape(br):
signups = []

soup = libStuff.getSoup(br, 'http://thepaintmixer.com/admin/viewdailysignups.php')

table = soup.find(id='Calendar')
rows = table.find_all('tr')
rowNumber = 0
for row in rows:
if rowNumber == 0:
rowNumber = rowNumber + 1
continue
cells = row.find_all('td')
cellNumber = 0
for cell in cells:
if cellNumber == 0:
try:
firstName = cell.contents[0]
except IndexError:
firstName = None
elif cellNumber == 1:
try:
lastName = cell.contents[0]
except IndexError:
lastName = None
elif cellNumber == 2:
try:
address1 = cell.contents[0]
except IndexError:
address1 = None
elif cellNumber == 3:
try:
address2 = cell.contents[0]
except IndexError:
address2 = None
elif cellNumber == 4:
try:
city = cell.contents[0]
except IndexError:
city = None
elif cellNumber == 5:
try:
state = cell.contents[0]
except IndexError:
state = None
elif cellNumber == 6:
try:
zip = cell.contents[0]
except IndexError:
zip = None
elif cellNumber == 7:
try:
phone = cell.contents[0]
except IndexError:
phone = None
elif cellNumber == 8:
try:
email = cell.contents[0]
except IndexError:
email = None
elif cellNumber == 9:
try:
classId = cell.contents[0]
except IndexError:
classId = None
elif cellNumber == 10:
try:
date = cell.contents[0]
except IndexError:
date = None
elif cellNumber == 11:
try:
time = cell.contents[0]
except IndexError:
time = None
elif cellNumber == 12:
try:
paid = cell.contents[0]
except IndexError:
paid = None
elif cellNumber == 13:
try:
seatCost = cell.contents[0]
except IndexError:
seatCost = None
elif cellNumber == 14:
try:
notes = cell.contents[0]
except IndexError:
notes = None
elif cellNumber == 15:
try:
className = cell.contents[0]
except IndexError:
className = None
elif cellNumber == 16:
try:
seats = cell.contents[0]
except IndexError:
seats = None
elif cellNumber == 17:
try:
groupId = cell.contents[0]
except IndexError:
groupId = None
elif cellNumber == 18:
try:
agentName = cell.contents[0]
except IndexError:
agentName = None
elif cellNumber == 19:
try:
agentCompany = cell.contents[0]
except IndexError:
agentCompany = None
cellNumber = cellNumber + 1

address = Address(address1, address2, city, state, zip)
registrant = Registrant(firstName, lastName, address, phone, email)
signup = Signup(registrant, classId, date, time, paid, seatCost, notes, className, seats, groupId, agentName, agentCompany)
signups.append(signup)
return signups
#I then call json.dumps() on that returned list
json.dumps(scrape(br), default=lambda o: o.__dict__)

我的构造函数搞砸了吗?我是否传递了不该传递的东西?

最佳答案

可能的原因是 cell.contents[0]返回一个复杂的 BeautifulSoup 对象而不是纯文本。 BeautifulSoup 对象知道它们的父对象、兄弟对象、解析器类、属性和其他可能共享或循环的对象。

当一个 <td>元素包含内部 html。这在表格中很常见(例如,表格条目可能是粗体或斜体)。

您的问题的可能解决方案是确保使用 BeautifulSoup 的 .text确保您只获取文本而不是内部 BeautifulSoup 元素:

columns = [col.text for col in row.findAll('td')] 

FWIW,这是一种简单的诊断技术,可以查看实际发生的情况。只需修改 json.dumps() 中的默认函数,使其输出可见:

def view_dict(obj):
print '--------------'
print 'Type:', obj.__class__
d = obj.__dict__
pprint.pprint(d)
return d

json.dumps(scrape(br), default=view_dict)

循环引用应该会立即弹出。希望这能揭开谜团(因为否则您的代码看起来很好并且没有明确创建循环引用)。

关于python - 循环引用在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25356695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com