Я просто пробую Python, и он мне очень нравится! Но я застрял с try/except.
У меня есть код, который проверяет, является ли raw_input целочисленным, но я хотел бы, чтобы он функционировал, а он не хочет им быть :)
вот код, у меня такой:
number_of_iterations = raw_input("What is your favorite number?")
try:
int(number_of_iterations)
is_number = True
except:
is_number = False
while not is_number:
print "Please put a number!"
number_of_iterations = raw_input("What is your favorite number?")
try:
int(number_of_iterations)
is_number = True
except:
is_number = False
Я не хочу повторяться здесь, и поэтому я думаю, что что-то собирается сделать функцию:
def check_input(input_number):
try:
int(input_number)
return True
except:
return False
Но он делает ошибку, если вводит строку, говоря, что int нельзя использовать для строк. Похоже, он не видит ключевое слово «попробовать». Может smone объяснить, почему это происходит и как предотвратить это в будущем?
check_input
? - person Henry Keiter   schedule 26.04.2013except
без определения класса ошибок. Это будет означать обработкуKeyboardInterrupt
или чего-то подобного. Используйтеexcept ValueError
или хотя быException
. Взгляните на pythons встроенные исключения. - person Vyktor   schedule 26.04.2013return True
в блокelse
блокаtry/except
. Плохо нагромождать функциональность в блокеtry
, когда вы используете его какif
, как здесь. Любые другие операторы, следующие за оператором, из которого вы фактически пытаетесь обработать ошибки, также будут перехваченыexcept
, что может привести к раздражающим ошибкам.try
что выtry
делаете,else
чтоtry
if
делаете. - person Silas Ray   schedule 26.04.2013int(number_of_iterations)
где-то вне блока try/except - person Krzysztof Bujniewicz   schedule 26.04.2013if
, но вы используете блокtry/except
, чтобы в основном функционировать как операторif
.if not raised_exception(something()): do_stuff()
. Помещение условного поведения в блокtry
похоже на вызовdo_stuff()
изsomething()
, а не в результате того, что делаетsomething()
. - person Silas Ray   schedule 26.04.2013