0

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

这是问题:

编写一个函数 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')

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

4

3 回答 3

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')
于 2014-09-01T06:31:51.110 回答
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')

于 2014-09-01T06:59:42.947 回答
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语句语法,我们可以编写:

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 语句中True还是False在 if 语句中,如下所示:

if all_digits(string) is True:

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

if all_digits(string):
于 2014-09-01T08:23:24.223 回答