簡體   English   中英

引發異常

[英]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, 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

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM