首页 > 解决方案 > AttributeError: 'int' 对象没有属性 'val' num = my_list.val + new_sum

问题描述

我正在尝试学习python,但遇到了一些麻烦。我需要使用两个链表并用它们的总和创建一个新的链表,我可以假设这两个数字不包含任何前导零,除了数字 0 本身,但我得到了错误

   AttributeError: 'int' object has no attribute 'val'
    num = my_list.val + new_sum
Line 80 in addTwoNumbers (Solution.py)
    ret = Solution().addTwoNumbers(param_1, param_2)
Line 121 in _driver (Solution.py)
    _driver()
Line 132 in <module> (Solution.py)

我不明白如果我像我一样初始化它,为什么 my_list 会是一个 int 而没有一个 val 。这是生成错误的代码:

    # Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution: 
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
                    my_list = ListNode(0)
                    my_list.next = 0
                    ptr = my_list
                    def countSize(lst: Optional[ListNode]) -> int:
                        r = 0
                        while lst:
                            r += 1
                            lst = lst.next
                        return r
                    num1 = countSize(l1)
                    num2 = countSize(l2)
                    if num1 > num2:
                        i = 0
                        while l1:
                            if i > num2:
                                new_sum = l1.val
                                num = my_list.val + new_sum
                                if num > 9:
                                    my_list.val = my_list.val + new_sum - 10
                                    my_list.next.val = 1
                                    my_list = my_list.next
                                    l1 = l1.next
                                    i += 1
                                    continue
                                else:
                                    my_list.val = my_list.val + new_sum
                                    my_list.next = 0
                                    my_list = my_list.next
                                    l1 = l1.next
                                    i += 1
                                    continue
                            else:
                                new_sum = l1.val + l2.val
                                num = my_list.val + new_sum
                                if num > 9:
                                    my_list.val = my_list.val + new_sum - 10
                                    my_list.next.val = 1
                                    my_list = my_list.next
                                    l1 = l1.next
                                    l2 = l2.next
                                    i += 1
                                    continue
                                else:
                                    my_list.val = my_list.val + new_sum
                                    my_list.next = 0
                                    my_list = my_list.next
                                    l1 = l1.next
                                    l2 = l2.next
                                    i += 1
                                    continue
                    else:
                        i = 0
                        while l2:
                            if i > num1:
                                new_sum = l2.val
                                num = my_list.val + new_sum
                                if num > 9:
                                    my_list.val = my_list.val + new_sum - 10
                                    my_list.next.val = 1
                                    my_list = my_list.next
                                    l2 = l2.next
                                    i += 1
                                    continue
                                else:
                                    my_list.val = my_list.val + new_sum
                                    my_list.next = 0
                                    my_list = my_list.next
                                    l2 = l2.next
                                    i += 1
                                    continue
                            else:
                                new_sum = l1.val + l2.val
                                num = my_list.val + new_sum
                                if num > 9:
                                    my_list.val = my_list.val + new_sum - 10
                                    my_list.next.val = 1
                                    my_list = my_list.next
                                    l1 = l1.next
                                    l2 = l2.next
                                    i += 1
                                    continue
                                else:
                                    my_list.val = my_list.val + new_sum
                                    my_list.next = 0
                                    my_list = my_list.next
                                    l1 = l1.next
                                    l2 = l2.next
                                    i += 1
                                    continue
                    return ptr

标签: pythonerror-handlingattributeerror

解决方案


有很多这样的行:my_list = my_list.next.

像这样的行第一次运行时,my_list会变成 an int,下次你点击时,my_list.val你会得到错误。


推荐阅读