0

我正在用 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)计算累积范数的最佳方法是什么?

4

1 回答 1

6

问题在于S_tandK是字符串,因为命令行参数是字符串。

如果要将它们转换为其他类型,则必须告诉 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。既然是 in 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
于 2013-04-19T01:58:57.393 回答