python - TypeError:list indices必须是整数或切片,而不是str

时间:2018-06-13 17:46:59

标签: python python-3.x

这是我的代码:

for i in range(len(sys.argv)):
    if sys.argv[i] == "--width":
        if math.isnan(sys.argv[i+1]):
            print("Width specified ({0}) is not a valid integer!".format(sys.argv[i+1]))
            sys.exit()
    else:
        width = int(sys.argv[i+1])

以下是我的意见:

python3 main.py --width 1280 --height 720

我希望width和height变量分别设置为1280和720.

相反,这就是我得到的:

Traceback (most recent call last):
  File "main.py", line 8, in <module>
    if sys.argv[i] == "--width":
TypeError: list indices must be integers or slices, not str

我对命令行Python有一定的经验,但这是我第一次创建PyQt应用程序,特别是使用sys.argv。为什么我会收到此错误,如何解决?感谢。

2 个答案:

答案 0 :(得分:2)

使用argparse模块而不是滚动自己的命令行参数处理器。

import argparse

p = argparse.ArgumentParser()
p.add_argument("--width", type=int, default=0)
args = p.parse_args()

print("You chose {}".format(args.width))

行动中:

% python tmp.py
You chose 0
% python tmp.py --width 3
You chose 3
% python tmp.py --width foo
usage: tmp.py [-h] [--width WIDTH]
tmp.py: error: argument --width: invalid int value: 'foo'

答案 1 :(得分:0)

修正:

for i in range(len(sys.argv)):
    if sys.argv[i] == "--width":
        if math.isnan(sys.argv[i+1]):
            print("Width specified ({0}) is not a valid integer!".format(sys.argv[i+1]))
            sys.exit()
    else:
        width = int(sys.argv[i+1])