1

例如,我定义了一个需要几个输入参数的函数,如果没有分配一些关键字参数,通常会有一个 TypeError 消息,但我想改变它,输出一个 NaN 作为结果,可以这样做吗?

def myfunc( S0, K ,r....):
    if  S0 = NaN or .....:

怎么做?非常感激。

编辑:

def myfunc(a):
    return a / 2.5 + 5

print myfunc('whatever')

>python -u "bisectnewton.py"
Traceback (most recent call last):
  File "bisectnewton.py", line 6, in <module>
    print myfunc('whatever')
  File "bisectnewton.py", line 4, in myfunc
    return a / 2.5 + 5
TypeError: unsupported operand type(s) for /: 'str' and 'float'
>Exit code: 1

我想要的是,myfunc(a) 只接受一个数字作为输入,如果输入了一些其他数据类型,如 string = 'whatever',我不想只输出默认错误消息,我希望它输出类似 return 'NaN' 告诉其他人输入应该是一个数字。

现在我把它改成了这个,但还是不行,顺便说一句,和 NaN 不一样吗?我认为他们是不同的。

def myfunc(S0):
    if math.isnan(S0):
        return 'NaN'
    return a / 2.5 + 5

print myfunc('whatever')

>python -u "bisectnewton.py"
Traceback (most recent call last):
  File "bisectnewton.py", line 8, in <module>
    print myfunc('whatever')
  File "bisectnewton.py", line 4, in myfunc
    if math.isnan(S0):
TypeError: a float is required
>Exit code: 1

谢谢!

4

4 回答 4

8

你可以捕获 TypeError 并用它做任何你想做的事情:

def myfunc(a):
  try:
    return a / 2.5 + 5
  except TypeError:
    return float('nan')

print myfunc('whatever')

Python 教程有一个关于这个主题的优秀章节。

于 2013-08-26T19:38:45.803 回答
0
def myfunc(S0 = None, K = None, r = None, ....):
    if S0 is None or K is None or r is None:
        return NaN
于 2013-08-26T19:43:58.650 回答
0

是的,要生成 NaN,您可以float('nan')

>>> import math
>> float('nan')
nan
>>> math.isnan(float('nan'))
True

所以你可以return float('nan')在任何你想返回的地方nan。不过,我建议您只提出例外。

于 2013-08-26T19:47:55.073 回答
0

如果不想使用 TypeError,那么使用 AttributeError 怎么样?

def myfunc(a):
  try:
    return a / 2.5 + 5
  except AttributeError:
    return float('nan')

print myfunc('whatever')
于 2021-10-11T06:12:16.800 回答