Почему вызов кортежа работает, если первый элемент является исключением?

Мне трудно понять это, это об ошибках, которые можно сделать при вызове исключения в Python 2.7:

try:
  raise [1, 2, 3, 4]
except Exception as ex:
  print ex

сообщение здесь «исключения должны быть классы в старом стиле или производные от BaseException, а не из списка» — эта часть в порядке, но когда я меняю ее на кортеж, я путаюсь:

try:
  raise (1, 2, 3, 4)
except Exception as ex:
  print ex

сообщение здесь «исключения должны быть классами в старом стиле или производными from BaseException, а не int" - почему это интерпретируется как возбуждение int, а не кортежа?

Кроме того:

try:
  raise (Exception, 'a message')
except Exception as ex:
  print ex

Здесь мы на самом деле вызываем Exception (согласованное поведение по сравнению с предыдущим примером, где мы вызывали int) – я кратко подумал, что это просто альтернативный способ для этого:

try:
  raise Exception, 'a message'
except Exception as ex:
  print ex

Но в в этом случае «сообщение» передается в ctor исключений (как задокументировано на docs.python.org)

Может ли кто-нибудь объяснить 2-й и 3-й случаи и, возможно, указать мне код в интерпретаторе, который отвечает за это?

22
задан WloHu 16 October 2018 в 09:08
поделиться