(Python) не может получить доступ к атрибуту объекта, пока я не проверю недействительность, почему?Python

Программы на Python
Ответить
Anonymous
 (Python) не может получить доступ к атрибуту объекта, пока я не проверю недействительность, почему?

Сообщение Anonymous »

Проблема LeetCode, связанная со связанными списками, имеющими такую ​​структуру:

Код: Выделить всё

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
Выдала ошибку при попытке напечатать val следующего узла, но все равно работала при проверке на нулевое значение (он даже не перешел к else
) code>).
Предполагая, что l1 является экземпляром класса ListNode с print(l1.nextNode), дает:

Код: Выделить всё

ListNode{val: 4, next: ListNode{val: 3, next: None}}
И: nextNode = l1.next
Почему это Сбой: print (nextNode.val)

Код: Выделить всё

AttributeError: 'NoneType' object has no attribute 'val'
Пока это Работает:

Код: Выделить всё

if nextNode is not None:
print(nextNode.val)
else:
print("Node is None")
Дополнительно:
Интересно, связан ли ответ на приведенный выше вопрос с тем, почему это также Не работает с помощью try/catch:

Код: Выделить всё

try:
print("try block executed")
print(nextNode.val)
except:
**print("except block executed1")
print(nextNode.val)**
if nextNode is not None:
print("except block executed"2)
print(nextNode.val)
else:
print("Node is None")
Пока это Работает и печатает, попробуйте выполнить блок:

Код: Выделить всё

try:
print("try block executed")
print(nextNode.val)
except:
if nextNode is not None:
print("except block executed")
print(nextNode.val)
else:
print("Node is None")
РЕДАКТИРОВАТЬ:
Найдена причина, оказалось, что код не работает для определенного тестового примера, где он имеет только 1 узел, но когда он успешен, он показывает результат другого тестового примера< /p>
Обнаружил это при попытке создать копируемый код, ошибка новичка...
Для получения более подробной информации проверьте проблему LeetCode по предоставленной ссылке. в начале.

Подробнее здесь: https://stackoverflow.com/questions/793 ... ullity-why
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»