Bash/Python 错误处理?

Bash/Python 错误处理?

我正在尝试执行非常基本的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 退出状态,但显然事实并非如此?

  1. 我的代码没问题吗?
  2. 有没有办法可以强制 Python 首先处理错误而不调用 Bash?
  3. 将 Python 程序(大概是正确编写的)作为 Bash 脚本运行时还存在其他严重的陷阱吗?

答案1

您将代码写入Python 3(查看“打印”),但结果却表明Python 2. 将 shebang 更改为

#!/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 中的。

答案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

相关内容