我正在尝试在函数中输入错误的数据类型时显示错误消息。在这种情况下,我仅在调用函数时尝试接受int
或float
。在函数中输入str
应该返回错误消息
def isPrime(i):
if not (type(i)==float or type(i)==int):
print("Input wrong type")
return None
i = abs(int(i))
if i == 2 or i == 1:
return True
if not i & 1:
return False
for x in range(3, int(i**0.5) + 1, 2):
if i % x == 0:
return False
return True
# Wanting the code to return an error
isPrime(bob)
答案 0 :(得分:1)
如果您使用的是Python 3.5+,则可以将类型提示与以下修饰符(我从@MartijnPieters的typeconversion decorator改编而成)一起使用,以强制执行类型提示:
import functools
import inspect
def enforce_types(f):
sig = inspect.signature(f)
@functools.wraps(f)
def wrapper(*args, **kwargs):
bound = sig.bind(*args, **kwargs)
bound.apply_defaults()
args = bound.arguments
for param in sig.parameters.values():
if param.annotation is not param.empty and not isinstance(args[param.name], param.annotation):
raise TypeError("Parameter '%s' must be an instance of %s" % (param.name, param.annotation))
result = f(*bound.args, **bound.kwargs)
if sig.return_annotation is not sig.empty and not isinstance(result, sig.return_annotation):
raise TypeError("Returning value of function '%s' must be an instance of %s" % (f.__name__, sig.return_annotation))
return result
return wrapper
@enforce_types
def isPrime(i: float) -> bool:
i = abs(int(i))
if i == 2 or i == 1:
return True
if not i & 1:
return False
for x in range(3, int(i**0.5) + 1, 2):
if i % x == 0:
return False
return True
这样:
print(isPrime(1))
print(isPrime(1.0))
都将输出True
,但是:
print(isPrime('one'))
会引发以下异常:
TypeError: Parameter 'i' must be an instance of <class 'float'>
答案 1 :(得分:0)
所以:
if not (type(i)==float or type(i)==int):
print("Input wrong type")
return None
可以简化为:
if not isinstance(i,(float,int)):
print("Input wrong type")
return None
然后执行错误消息:
if not isinstance(i,(float,int)):
raise TypeError('Your Text here') #You can do any error i do `TypeError` just for now.
然后创建自己的错误消息:
class MyError(Exception):
pass
然后在这里
if not isinstance(i,(float,int)):
raise MyError('Your Text here')
但是我更喜欢使用TypeError
来犯错