我正在尝试执行非常基本的Python包含错误处理的代码猛击脚本,但是虽然代码在 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 处理,然后它会向 Bash 返回 0 退出状态,但显然事实并非如此?
- 我的代码没问题吗?
- 有没有办法可以强制 Python 首先处理错误而不调用 Bash?
- 将 Python 程序(大概是正确编写的)作为 Bash 脚本运行时还存在其他严重的陷阱吗?
答案1
答案2
我建议你raw_input
发挥比 更大的作用input
。
input([prompt]) -> raw_input([prompt])
相当于 eval(raw_input(prompt))。
此函数不会捕获用户错误。如果输入的语法无效,则会引发 SyntaxError。如果评估过程中出现错误,则可能会引发其他异常。
如果已加载 readline 模块,input()
则将使用它来提供精细的行编辑和历史记录功能。
考虑使用该raw_input()
函数来接收用户的一般输入。
您可以在以下网址查看https://docs.python.org/2.7/library/functions.html?highlight=input#input
答案3
另一种修复方法是使用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