我正在尝试创建一个脚本来检查是否输入了参数。如果输入了一个参数,它将使用该数字作为计时器,如果没有输入参数,则默认情况下,计时器应该等于3.
此while循环将从给定数字&在倒计时时打印每个值。当它到达终点时,它将输出'爆炸!'
#!/usr/bin/env python3
import sys
timer = int(sys.argv[1])
while timer != 0:
if len(sys.argv[1]) == 0:
timer = 3
elif len(sys.argv[1]) == int(sys.argv[1]):
timer = int(sys.argv[1])
print (timer)
timer = timer - 1
print ('blast off!')
我的作业检查脚本给出了一个IndexError错误:列表索引超出范围 - 与第一个计时器相关= int(sys.argv [1])
我不确定我应该如何"将空字符串转换为整数"
谢谢
答案 0 :(得分:1)
检查你确实有一个参数:
timer = int(sys.argv[1]) if len(sys.argv) >= 2 else 3
答案 1 :(得分:0)
您正在尝试索引列表中不存在的位置并获得IndexError: list index out of range。
让我们调用您的文件countdown.py
。
当您运行 python3 countdown.py
,然后 sys.argv == ['countdown.py']
。
如果你跑 python3 countdown.py 5
,那么 sys.argv == ['countdown.py', 5]
建议查看argparse库,因为这是从命令行解析参数的pythonic方法。
例如,您的代码如下所示: #!/ usr / bin / env python3
import argparse
def countdown(timer):
[print(tick) for tick in reversed(range(1, timer+1))]
print('blast off!')
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Countdown to blast off!')
parser.add_argument('timer', type=int, nargs='?', default=3)
args = parser.parse_args()
countdown(args.timer)
答案 2 :(得分:0)
我猜测你的脚本是在没有参数的情况下调用的,因为len(sys.argv) == 0
会失败。
如果用户没有指定值,则将计时器设置为任何值。
import sys
##################
if len(sys.argv) > 1:
timer = int(sys.argv[1])
else:
timer = 0
##################
while timer != 0:
if len(sys.argv[1]) == 0:
timer = 3
elif len(sys.argv[1]) == int(sys.argv[1]):
timer = int(sys.argv[1])
print (timer)
timer = timer - 1
print ('blast off!')
甚至更好:
try:
timer = int(sys.argv[1])
except:
timer = 0