簡體   English   中英

無效的參數引發異常

[英]Invalid argument raise exception

我如何使用tryexcept測試我的參數是否會引發異常而不實際引發異常?

class MyClass:
    def function(parameter):
        pass

parameter是一個模糊函數,可能引發任何異常中的1個或多個,例如:

parameter = pow("5", 5)

在調用函數后且函數可以執行其語句之前,將TypeError

據我了解,您想處理所引發的異常,並檢查所引發的錯誤類型以進行進一步檢查? 這是一種方法。

class Foo(object):
    def find_errors(arg):
        errors = []
        try:
            # do something
        except TypeError as e:
            errors.append(e)
            # handle exception somehow
        except ValueError as e:
            errors.append(e)
            # handle exception somehow
        # and so on ...
        finally:
            pass #something here

        return errors, ans

現在,您可以檢查errors並找出引發了哪些異常。

如果您希望參數為某種類型,則可以使用type(paramter) is parametertype

例如,如果您想驗證“ i”是否為整數,請運行指令if(type(i) is int):

通過編輯:

try:
    pow("5",5)
    return 0
except Exception, err:
    sys.stderr.write('ERROR: %s\n' % str(err))
    return 1

也許您的意思是如何捕獲由無效函數調用引起的TypeError異常?

像這樣:

def foo(bar):
    pass

foo(1, 2)

您不會在函數中捕獲它們,當然也不會在def foo(bar):行中捕獲它們。

是錯誤的函數調用者 ,因此您可以在其中捕獲異常:

try:
    foo(1, 2)
except TypeError:
    print('call failed')

在對另一個答案的評論中,您說: parameter是另一個函數;例如: parameter = pow("5", 5)會引發TypeError ,但它可以是任何類型的函數和任何類型的異常。”

如果要在函數內部捕獲異常,則必須在該函數內部調用paramenter(我認為這是可以調用的):

def function(callable, args=()):
    try:
        callable(*args)
    except:
        print('Ops!')

例:

>>> function(pow, args=("5", 5))
Ops!

如果您確實需要在函數內部調用“ paramenter”。 否則,您應該在外部管理其行為,例如:

>>> try:
...     param = pow('5', 5)
... except:
...     param = 10
... 
>>> param
10
>>> function(param)

在此示例中,引發異常是pow not function ,因此,好的做法是將兩個不同的調用分開,並用try-except語句包裝可能失敗的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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