python 如果没有命令行参数传递给脚本,尝试使用默认函数参数时出现IndexError [重复]

l5tcr1uw  于 2023-08-02  发布在  Python
关注(0)|答案(2)|浏览(109)

此问题在此处已有答案

Checking if sys.argv[x] is defined(8个回答)
How can I read and process (parse) command line arguments?(22个回答)
What does "sys.argv[1]" mean? (What is sys.argv, and where does it come from?)(9个答案)
7小时前关闭
我对Python的逻辑有些问题。不知道这是否可能,但如果bash可以,我想其他语言也可以。
如果没有命令行参数传递给脚本,我想使用默认函数参数:

#!/usr/bin/env python3

import sys

def get_file_name(filename: str = "watched_movies"):
    if sys.argv[1]:
        filename = sys.argv[1]
        return filename
    return filename
    
print(get_file_name())

字符串
我的代码可能是错误的,因为我只是做一些闲逛。
我收到错误:

Traceback (most recent call last):
  File "/home/os/scripts/python/./movies.py", line 11, in <module>
    print(get_file_name())
  File "/home/os/scripts/python/./movies.py", line 6, in get_file_name
    if sys.argv[1]:
IndexError: list index out of range

xpszyzbs

xpszyzbs1#

试试看:

#!/usr/bin/env python3
    
import sys

def get_file_name(filename: str = "watched_movies"):
    if len(sys.argv) > 1 and sys.argv[1]:
        filename = sys.argv[1]
        return filename
    return filename 
    
print(get_file_name())

字符串
在一行中:

def get_file_name(filename: str = "watched_movies"):
    return filename if len(sys.argv) == 1 else sys.argv[1]

enyaitl3

enyaitl32#

#!/usr/bin/env python3

import sys

def get_file_name(filename: str = "watched_movies"):
    if len(sys.argv) < 2:
        print("no file name!")
        return
    if sys.argv[1]:
        filename = sys.argv[1]
        return filename
    return filename
    
print(get_file_name())

字符串
输出量

python main.py
no file name!
None

python main.py test
test


argv是一个数组。如果没有参数,那么它的长度是1(只有一个元素),索引1超出了范围。

相关问题