提出异常

时间:2014-09-01 06:24:14

标签: python exception raise

这是一个家庭作业问题。我一直试图解决它,但无法得到正确的结果。

这就是问题:

  

编写函数string2int,尝试将字符串转换为整数。如果字符串确实表示正整数,则应返回该整数。如果字符串不表示正整数,那么您应该引发语法异常(raise SyntaxError('not an integer'))。

     

您可以选择使用带有字符串的(已定义的)函数all_digits,如果字符串的所有字符都是数字,则返回True,否则返回False

到目前为止我得到的是:

try all_digits is True:
    return int(num)
except all_digits is False:
    raise SyntaxError('not an integer')

因为我使用的是已定义的函数,所以我没有定义函数(或者我错了吗?)。 有人可以查看我的代码吗?非常感谢。

3 个答案:

答案 0 :(得分:3)

我可以猜到,但是你可能想告诉我们你执行代码时会遇到什么样的错误(下次你提出问题时只是抬头)。

有几个错误:

1)

的语法
try all_digits is True:

错了。 “try”语句应如下所示:

try:
    <your code>
except <type of exception to catch>:
    <error handling code>

2)你说“all_digits”是一个函数。因此,代码

all_digits is True

应该是

if all_digits(num):

全部放在一起:

def string2int(num):
    if all_digits(num):
        return int(num)
    raise SyntaxError('not an integer')

答案 1 :(得分:0)

除了Rawing的优秀答案之外,请注意通常使用try/except的时间是您可以处理try块中抛出的错误并继续照常执行。例如:

def add_three(x) -> int:
    try:
        return x + 3
    except TypeError:
        # someone passed a non-int/float to the function!
        #   let's try and coerce it.
        return int(x) + 3
        # if this still throws an exception, we'll let it
        #   raise its own TypeError exception!

在您的情况下,您似乎只是在做常规条件,所以请使用if all_digits(num): return int(num) else: raise TypeError('not an integer')

答案 2 :(得分:0)

all_digits(string)功能:

首先,了解预定义all_digits(string)函数的作用是很好的。以下是该功能的示例实现,可根据您的描述进行操作。它会检查字符串的每个字母是否为数字,并相应地返回布尔值TrueFalse

def all_digits(string):
''' only returns True if all characters of the string are Integers '''
    for l in string:
        if l.isdigit(): pass
        else: return False
    return True
带有string2num(string)声明的

raise函数:

现在,我们可以在string2num(string)函数的错误处理块中使用此函数。由于您的问题只需要raise特定的异常,而不是继续使用备用代码块,因此您不需要try: ... except:块。

使用raise statement的正确语法,我们可以写:

def string2num( string = '-23'):
    if all_digits(string):
        return int('23')
    raise SyntaxError("not an integer")

我们得到:

>>> string2num()
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "<stdin>", line 4, in string2num
SyntaxError: not an integer

try: ... except: ...阻止:

但是,如果您确实希望在引发异常时执行备用代码块,则可以使用try: ... except:块语法。例如,如果你想进一步检查字符串是否为负整数,你可能需要它,如果是,那么返回负整数:

def string2num( string = '-23'):
    try:
        if all_digits(string):
            return int(string)
        raise SyntaxError("not an integer")
    except SyntaxError:
        #alternate code goes here#
        try:
            return int(string)
        except ValueError:
            print "string contains an alphabet"

这将产生:

>>> string2num()
-23
>>> string2num('ab2')
string contains an alphabet

if声明的样式:

作为关于样式的旁注,您不必在if语句中明确写出表达式是否计算为TrueFalse,如下所示:

if all_digits(string) is True:

由于all_digits(string)返回一个布尔值,你可以等效地说if True,如下所示:

if all_digits(string):