未传命令行参数时用默认函数参数触发IndexError问题求助
问题排查与解决
错误原因
当没有向脚本传递命令行参数时,sys.argv列表仅包含一个元素(脚本自身的路径/名称),此时直接访问sys.argv[1]会触发IndexError,因为该索引不存在。
修复方案
方案1:检查参数数量后取值
通过判断sys.argv的长度是否大于1,确认存在额外参数后再取值:
#!/usr/bin/env python3 import sys def get_file_name(filename: str = "watched_movies"): if len(sys.argv) > 1: filename = sys.argv[1] return filename print(get_file_name())
方案2:用三元表达式简化逻辑
可以将判断逻辑简化为一行:
#!/usr/bin/env python3 import sys def get_file_name(filename: str = "watched_movies"): return sys.argv[1] if len(sys.argv) > 1 else filename print(get_file_name())
方案3:使用argparse模块(推荐)
如果后续需要处理更复杂的命令行参数,Python标准库的argparse模块是更规范的选择,它原生支持可选参数和默认值:
#!/usr/bin/env python3 import argparse parser = argparse.ArgumentParser() # nargs='?'表示该参数可选,未传递时使用default指定的值 parser.add_argument("filename", nargs='?', default="watched_movies") args = parser.parse_args() print(args.filename)
内容的提问来源于stack exchange,提问作者wilk85
相关产品推荐
相关产品推荐

