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

问题描述 投票:0回答:2

我在一些 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
python function command-line arguments
2个回答
1
投票

尝试一下:

#!/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]

1
投票
#!/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

sys.argv 是一个数组,如果没有参数则长度为 1(只有一个元素),索引 1 超出范围。

© www.soinside.com 2019 - 2024. All rights reserved.