首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我在提出例外的职能上做错了什么?

我在提出例外的职能上做错了什么?
EN

Stack Overflow用户
提问于 2015-08-30 07:20:20
回答 2查看 820关注 0票数 0

指令:编写一个函数validate_input( string ),它接受格式为“命令arg1 arg2”的命令字符串,并返回对(“命令”、“arg1”、“arg2”),其中arg1和arg2已转换为浮点数。如果命令不是'add‘、'sub’、'mul‘或'div’之一,则必须引发InvalidCommand。如果不能将参数转换为浮动,则必须引发InvalidCommand。

典型投入和产出:

validate_input('add 2 3') -> ('add‘2.,3.)

validate_input('hahahaha _2_ 3') ->提出InvalidCommand()

validate_input('add 6-3‘) ->引发InvalidCommand()

这是我的代码:

代码语言:javascript
复制
class InvalidCommand(Exception):
    pass

def validate_input(string):
"""
validate_input(str) -> (str, [float])

If string is a valid command, return its name and arguments.
If string is not a valid command, raise InvalidCommand

Valid commands:
  add x y
  sub x y
  mul x y
  div x y

Arguments x and y must be convertable to float.

"""
    inlist = string.split(' ')
    commands = []
    strdigits = []
    floats = []
    output = []
    for x in inlist:
        if x.isdigit():
            strdigits.append(x)
        else:
            commands.append(x)
    for x in commands:
        try:
            x == 'add' or 'sub' or 'mul' or 'div'
            output.append(x)
        except ValueError:
            return InvalidCommand(ValueError)
    for x in strdigits:
        try:
            float(x)
            floats.append(float(x))
            output.append(floats)
        except ValueError:
            return InvalidCommand(ValueError)
    return tuple(output)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-30 07:40:21

第37行(for循环)将立即从floats追加值,这将导致它向output变量追加两次浮点数列表。对于输入mul 5 6,它返回('mul', [5.0, 6.0], [5.0, 6.0]),所以首先要做的事情是将output.append(floats)放在循环之后。

代码语言:javascript
复制
for x in strdigits:
    try:
        float(x)
        floats.append(float(x))
    except ValueError:
        return InvalidCommand(ValueError)
output.append(floats)

第二,这样做是错误的,

代码语言:javascript
复制
x == 'add' or 'sub' or 'mul' or 'div'

检查Python的这些输出。

代码语言:javascript
复制
>>> x = 'fas'
>>> x == 'add' or 'sub' or 'mul' or 'div'
'sub'
>>> x in ['add','sub','mul','div']
False
>>> bool('sub')
True

我希望这是清楚的,所以改变你的状况

代码语言:javascript
复制
if x in ['add','sub','mul','div']:
    output.append(x)
else:
    raise InvalidCommand(ValueError)

处理无效的command值。

正如Paul在注释中所建议的,使用raise Exception来引发异常。

票数 0
EN

Stack Overflow用户

发布于 2015-08-30 07:46:14

有多个错误,所以我将在标题中讨论一个问题:引发异常的错误是什么?

若要引发异常,请使用raise ExceptionType(parameter),而不是return

如下所示:

代码语言:javascript
复制
 class InvalidCommand(Exception):
     pass

 try:
      s = raw_input("Enter a number:")
      x = float(s)
 except ValueError:
      raise InvalidCommand(s+" is not a number")

请注意,自定义异常类型总是需要在某个地方定义。由于InvalidCommand是一个自定义异常类型(未包含在Python中),所以在使用它之前应该有一个InvalidCommand类定义。这个类定义可以接近python程序文件的顶部,并且只需要出现一次。

有关更多信息,请参见Python文档--错误和异常

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32294214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档