Ответ 1
Оба являются правильными; последняя форма позволяет прикрепить аргументы к вашему исключению:
if len(sys.argv) == 1:
raise EmptyArgs('Specify at least 1 argument')
Вы также можете передать аргументы в качестве второго значения в качестве кортежа в выражении raise:
if len(sys.argv) == 1:
raise EmptyArgs, ('Specify at least 1 argument',)
но одно значение не-кортежа будет работать и рассматривается как единственный аргумент:
if len(sys.argv) == 1:
raise EmptyArgs, 'Specify at least 1 argument'
и третье значение raise
позволяют указать альтернативную трассировку, которая затем используется вместо трассировки, которая будет сгенерирована для текущего местоположения в коде:
if len(sys.argv) == 1:
raise EmptyArgs, ('Specify at least 1 argument',), traceback_object
См. документацию для инструкции raise
Обратите внимание, что когда вы используете аргументы для своего исключения, Python styleguide PEP 8 предпочитает, чтобы вы предоставили экземпляр исключения, а не класс:
При создании исключения используйте
raise ValueError('message')
вместо старой формыraise ValueError, 'message'
.Форма, использующая парный вариант, предпочтительнее, потому что, когда аргументы исключений длинны или включают форматирование строк, вам не нужно использовать символы продолжения строки благодаря содержащимся круглым скобкам. Старая форма будет удалена в Python 3.
Python 3 больше не будет поддерживать эту форму.