Есть способ, но я не считаю его очень надежным. В сообщениях об ошибках есть небольшая разница:
a = [1,2,3]
b = [1,2,3]
a[2] = b[3]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-69-8e0d280b609d> in <module>()
2 b = [1,2,3]
3
----> 4 a[2] = b[3]
IndexError: list index out of range
Но если ошибка в левой части:
a[3] = b[2]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-68-9d66e07bc70d> in <module>()
2 b = [1,2,3]
3
----> 4 a[3] = b[2]
IndexError: list assignment index out of range
Обратите внимание на «назначение» в сообщении.
Итак, вы можете сделать что-то вроде:
a = [1,2,3]
b = [1,2,3]
try:
a[3] = b[2]
except IndexError as e:
message = e.args[0]
if 'assignment' in message:
print("Error on left hand side")
else:
print("Error on right hand side")
Выход:
# Error on left hand side
Опять же, я бы не слишком доверял этому, он потерпел бы неудачу, если сообщение изменилось в другой версии Python.
Я посмотрел на эти части исходного кода , эти разные сообщения действительно единственная разница между двумя ошибками.