我如何使用try
和except
测试我的参数是否会引发异常而不实际提升它?
class MyClass:
def function(parameter):
pass
parameter
是一个含糊不清的函数,可能会引发任何异常中的一个或多个,例如:
parameter = pow("5", 5)
一旦调用函数并且函数可以执行其语句之前,就会引发TypeError
。
答案 0 :(得分:1)
根据我的理解,您希望处理引发的异常,并检查为进一步检查提出的错误类型?这是一种方法。
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
并找出已经引发的异常。
答案 1 :(得分:0)
如果您希望参数为特定类型,则可以使用type(paramter) is parametertype
。
例如,如果您要验证'i'是否为int,请运行说明if(type(i) is int):
通过编辑:
try:
pow("5",5)
return 0
except Exception, err:
sys.stderr.write('ERROR: %s\n' % str(err))
return 1
答案 2 :(得分:0)
也许您的意思是如何捕获由无效函数调用引起的TypeError
异常?
像这样:
def foo(bar):
pass
foo(1, 2)
你没有在函数中捕获它们,当然也没有在def foo(bar):
行中捕获它们。
该函数的调用者发出错误,因此您可以捕获异常:
try:
foo(1, 2)
except TypeError:
print('call failed')
答案 3 :(得分:0)
在对另一个答案的评论中,你说:" parameter
是另一个功能;例如:parameter = pow("5", 5)
引发TypeError
,但它可以是任何类型的函数和任何类型的异常。"
如果你想在你的函数中捕获exeption,你必须在该函数内调用参数(我假设它是可调用的):
def function(callable, args=()):
try:
callable(*args)
except:
print('Ops!')
示例:
>>> function(pow, args=("5", 5))
Ops!
如果你真的需要打电话给你的"参数"在功能里面。否则你应该在外面管理它的行为,可能是这样的:
>>> try:
... param = pow('5', 5)
... except:
... param = 10
...
>>> param
10
>>> function(param)
在此示例中,引发异常的行为是pow
而不是function
,因此将两个不同的调用分开并用try-except
语句换行是一种很好的做法可能失败的代码。