这是一个家庭作业问题。我一直试图解决它,但无法得到正确的结果。
这就是问题:
编写函数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')
因为我使用的是已定义的函数,所以我没有定义函数(或者我错了吗?)。 有人可以查看我的代码吗?非常感谢。
答案 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)
函数的作用是很好的。以下是该功能的示例实现,可根据您的描述进行操作。它会检查字符串的每个字母是否为数字,并相应地返回布尔值True
或False
:
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语句中明确写出表达式是否计算为True
或False
,如下所示:
if all_digits(string) is True:
由于all_digits(string)
返回一个布尔值,你可以等效地说if True
,如下所示:
if all_digits(string):