ValueError
повышается, как только вы говорите int(bit)
, потому что bit
- это '-'
. Вы никогда не переходите к следующей строке своего кода, потому что исключение не перехватывается, поэтому оно возникает из вашего скрипта полностью.
Вместо:
for bit in binary_list:
if int(bit) > 1 or int(bit) < 0:
print('Invalid Binary')
exit()
вы можете сделать что-то вроде:
for bit in binary_list:
try:
assert 0 <= int(bit) <= 1
except AssertionError, ValueError:
print('Invalid Binary')
exit()
Обратите внимание, что вызов exit()
в функции обычно считается плохой практикой. Если вы просто разрешите возбудить исключение, это в любом случае приведет к завершению работы сценария, поэтому вы можете просто выполнить:
for bit in binary_list:
assert 0 <= int(bit) <= 1, 'Invalid Binary'
или, возможно:
assert all(bit in {'0', '1'} for bit in binary_list), 'Invalid Binary'
и получить по существу то же самое эффект (плюс трассировка стека, которая скажет пользователю, что именно убило скрипт). Разница с этим подходом заключается в том, что если вызывающая функция решает, что она хочет сделать что-то еще (например, попытаться запросить у пользователя другой номер), у них есть опция catch
, вызывающая исключение; если вы просто exit()
, у них нет возможности исправить ошибку.