![](/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.