![](/img/trans.png)
[英]Can the Python bool() function raise an exception for an invalid argument?
[英]Invalid argument raise exception
我如何使用try
和except
測試我的參數是否會引發異常而不實際引發異常?
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.