(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) .
Предполагая, что 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")



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

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

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

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

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

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