Обработка ошибок Bash / Python?

Я пытаюсь выполнить очень простой код Python , содержащий обработку ошибок, в виде скрипта Bash , но хотя в Python код работает нормально, код создает проблемы при выполнении в Bash.

#!/usr/bin/python 
x = input('Enter your number:  ')     
try:
    x = float(x)
    print('Your number multiplied by 2 is:  ', x*2) 
except ValueError:
    print('not a valid choice')
    x == 0

Это сообщение об ошибке от Bash:

Enter your number:  -p Traceback (most recent call last):
  File "cycle.py", line 3, in <module>
    x=input('Enter your number:  ')
  File "<string>", line 1, in <module>
NameError: name 'p' is not defined

Как я понимаю, ошибка ввода должна была сначала обрабатываться Python, а затем она возвращала бы 0 состояний выхода в Bash, но, очевидно, это Это не так?

  1. С моим кодом все в порядке?
  2. Есть ли способ заставить Python сначала обработать ошибку, не вызывая Bash?
  3. Есть ли другие критические ловушки при запуске программ на Python (предположительно правильно написанных) в виде скриптов Bash?
4
задан 16 June 2014 в 21:49

3 ответа

Вы пишете свой код в Python  3 (рассмотрение "печати"), но хижина предлагает Python  2 . Измените хижину на

#!/usr/bin/env python3

и выполните ее:

python3 /path/to/script.py

и это будет хорошо работать:)

Объяснение:

, Как подсказал в Florian Diesch', комментарий, input() изменился в Python  3:

В Python  2, input() попытки использовать вход в качестве выражения Python (как eval()), в то время как в Python  3, input() замены raw_input() от Python  2.

5
ответ дан 16 June 2014 в 21:49

Другой способ зафиксировать его, возьмите input внутренний try пункт. Это лучше except любая ошибка. x=0 я думаю, что Вы имеете в виду присвоение там. Таким образом, это может принять, значения как: 2*3

#!/usr/bin/python 
try:
    x=input('Enter your number:  ')
    x=float(x)
    print('Your number multiplied by 2 is:  ', x*2)
except:
    print('not a valid choice')
    x = 0
0
ответ дан 16 June 2014 в 21:49

Я предлагаю Вас raw_input функция, чем input.

input([prompt]) -> raw_input([prompt])

Эквивалентный оценке (raw_input (подсказка)).

Эта функция не фиксирует пользовательские ошибки. Если вход не будет синтаксически допустим, SyntaxError будет повышен. Другие исключения могут быть повышены, если существует ошибка во время оценки.

, Если readline модуль был загружен, то input() будет использовать его для обеспечения тщательно продуманного редактирования строки и функций истории.

Рассматривают использование эти raw_input() функция для общего входа от пользователей.

Вы видите об этом в https://docs.python.org/2.7/library/functions.html? highlight=input#input

2
ответ дан 16 June 2014 в 21:49

Другие вопросы по тегам:

Похожие вопросы: