Python“不支持的操作数类型”

时间:2013-04-19 01:57:18

标签: python math python-3.x

我正在用Python编写我的第一个程序,我收到了一个错误:

 "TypeError: unsupported operand type (s) for /: 'str' and 'str'

这就是我正在做的事情:

import sys
import math
import scipy.stats import norm

S_t = sys.argv[1];
K = sys.argv[2];
r = sys.argv[3];
T = sys.argv[4];
sigma_0 = sys.argv[5];

d1 = (math.log(S_t/K) + (r - pow(sigma_0, 2)/2)*T)/(simga_0*math.sqrt(T));
x = norm.cdf(d1);

我不确定我的错误在哪里。另外,x = norm.cdf(d1)是计算累积范数的最佳方法吗?

1 个答案:

答案 0 :(得分:6)

问题是S_tK是字符串,因为命令行参数是字符串。

如果你想将它们转换为其他类型,你必须告诉Python如何转换或转换什么。例如:

S_t = float(sys.argv[1])
K = float(sys.argv[2])
r = float(sys.argv[3])
T = float(sys.argv[4])

同时,值得学习自己调试。当你在这样的长行中得到一个错误,并且你无法分辨它的错误部分时,将其分解。如果你有这个:

d1 = (math.log(S_t/K) + (r - pow(sigma_0, 2)/2)*T)/(simga_0*math.sqrt(T))

尝试将其分解为

d1a = math.log(S_t/K)
d1b = (r - pow(sigma_0, 2)/2)*T)/(simga_0*math.sqrt(T))
d1 = d1a + d1b

现在,查看错误是在d1a还是d1b。因为它在d1a,所以再次分解:

d1a1 = S_t/k
d1a = math.log(d1a1)

现在你可以在d1a1看到它了。这更容易弄明白 - 如果你仍然无法弄清楚,你可以在这里发布一个更短的问题:

import sys

S_t = sys.argv[1]
K = sys.argv[2]

d1a1 = S_t/k