3

在 Windows 中:我希望这个程序在命令行上运行。但是,我收到一个错误。我究竟做错了什么?

# create a method that append the letter stored in variable letter, ntimes.

import sys
def appender(letter,ntimes, sentence):
    print sentence+(letter*ntimes)


appender(str(sys.argv[1]),sys.argv[2], str(sys.argv[3]))

以下是我从 Windows 命令行中得到的错误

C:\Users\QamarAli\Documents\afaq's stuff>appender.py "F" 10 "Hello this is sent"

Traceback (most recent call last):
  File "C:\Users\QamarAli\Documents\afaq's stuff\appender.py", line 8, in <modul
e>
    appender(str(sys.argv[1]),sys.argv[2], str(sys.argv[3]))
  File "C:\Users\QamarAli\Documents\afaq's stuff\appender.py", line 5, in append
er
    print sentence+(letter*ntimes)
TypeError: can't multiply sequence by non-int of type 'str'

C:\Users\QamarAli\Documents\afaq's stuff>
4

3 回答 3

5

错误很明显:

TypeError: can't multiply sequence by non-int of type 'str'

您试图将一个序列(在本例中为一个字符串)乘以一个不是数字的东西。将您的参数转换为整数:

appender(sys.argv[1], int(sys.argv[2]), sys.argv[3])

此外,sys.argv参数默认为字符串,因此无需再次显式转换它们。

于 2012-12-24T00:09:34.233 回答
3

中的值sys.argv都是字符串。而不是尝试将一些转换为字符串,您需要将其他转换为您需要的任何非字符串类型。如果您希望中间一个是整数,请调用int它。

于 2012-12-24T00:09:20.023 回答
2

Python 将所有命令行参数视为字符串。

将您的呼叫更改为

appender(sys.argv[1], int(sys.argv[2]), sys.argv[3])
于 2012-12-24T00:09:28.900 回答