如何检查 *args[0] 是否存在?

How to check if *args[0] exists?

在 Python 中,如何检查 *args[0] 是否存在?

def my_fxn(self, *args):
    print(args[0])

my_fxn('ABC')  # this prints 'ABC'
my_fxn()       # this crashes with "IndexError: tuple index out of range"

只需确保 args 存在且长度为 1 或更大。如果您要查找 args[1]...args[n].

,则同样的逻辑适用
def my_fxn(self, *args):
    if args and len(args) > 0:
        print(args[0])

编辑:

Per Willem 的评论 len(args) > 0 是不必要的,如果你正在寻找 args[0]

如果您使用 *args*args 将是一个元组 (具有零个、一个或多个元素)。如果元组包含 至少一个元素 ,则元组的真实性为 True。所以你可以简单地写:

def my_fxn(self, *args):
    <b>if args:</b>
        print(args[0])

另一种选择是:

def my_fxn(self, *args):
    arg0 = args and args[0] or False

# example results
# my_fxn('test', 'b', 12, 15) => 'test'
# my_fxn() => False

虽然不太确定人们对这种类型的过载有何看法。

编辑 快速解释发生了什么。当你自己寻找 args 时,当且仅当有东西传递给 args 时,它才会评估为 truthy。需要第一个测试来防止 IndexError: Index out of range 错误。如果 args 中有内容,它将 return 第一个参数 (args[0])。即使第一个位置的参数值为 'falsey' (f.e.0, [], etc)