[英]Raising an exception
這是一個作業問題。 我一直在嘗試解決問題,但無法獲得正確的結果。
這是問題:
編寫一個函數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')
因為我使用的是已經定義的函數,所以我沒有定義一個函數(或者我弄錯了嗎?)。 任何人都可以看看我的代碼嗎? 非常感激。
我可以猜測,但是您可能想告訴我們在執行代碼時遇到什么樣的錯誤(下次您提一個問題時請注意)。
有幾個錯誤:
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')
除了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')
all_digits(string)
函數:
首先,最好了解預定義的all_digits(string)
函數的功能。 以下是該功能的示例實現,可以根據您的描述進行操作。 它檢查字符串的每個字母是否都是數字,並相應地返回boolean, 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
帶raise
語句的string2num(string)
函數:
現在,我們可以在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 all_digits(string) is True:
由於all_digits(string)
返回一個布爾值,因此您可以等效地只說if True
,如下所示:
if all_digits(string):
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.