Что вы обнаружите, так это то, что ваш вариант 1 «быть осторожным» часто очень медленный.Кроме того, он подвержен неясным ошибкам, потому что тест, который вы пытались написать, чтобы «избежать» исключения, был неправильным.
Вы обнаружите, что ваш вариант 2 «быть прямым» часто намного быстрее.Это также более вероятно, будет правильным, а также быстрее и легче для людей читать.
Почему?Внутренне, Python часто реализует такие вещи, как «contains» или «has_key» в качестве теста исключения.
def has_key( self, some_key ):
try:
self[some_key]
except KeyError:
return False
return True
Так как обычно это метод типа has_key
, то нет причин для того, чтобы код делалтратить время на это в дополнение к тому, что Python уже сделает.
Более фундаментально, есть проблема правильности.Многие попытки предотвратить или избежать исключения являются неполными.
Например, попытка установить, является ли строка потенциально числом с плавающей запятой, чревата многочисленными исключениями и особыми случаями.Единственный способ сделать это правильно - это
try:
x= float( some_string )
except ValueError:
# not a floating-point value
Просто сделайте алгоритм, не беспокоясь о «предотвращении» или «избегании» исключений.