忽略 python 中的 IndexError(类似于列表订阅上的空合并运算符)
Ignore IndexError in python (Something like null coalescing operator on list subscription)
当我访问 list/array 索引超出范围?
import sys
input = sys.argv[1]
output = sys.argv[2]
当程序 运行 参数不超过 2 个时,这可能会导致 IndexError
。但是,如果我想说 argv[1]
和 argv[2]
有默认值,那么我应该这样写:
import sys
input = len(sys.argv) > 1 ? sys.argv[1] : DefaultValue1
output = len(sys.argv) > 2 ? sys.argv[2] : DefaultValue2
除了 try
之外,是否有任何 pythonic 方法来缩短此语句?
(类似于 pythonic 空合并运算符的 name = input or "Not set"
)
Related post? (using or
operator)
在 default_val_a
和 default_val_b
中设置您的默认值,并在 index
中设置您的索引 a 是您的 sys.arg[1]
,b 是您的 sys.arg[2]
。这是我能想到的最pythonic和单行的方式:
import sys
a = [1]
b = []
default_val_a = [1, 2, 3]
default_val_b = [4, 5, 6]
index = 1
a = default_val_a[index] if len(a) <= index or not a else a[index]
b = default_val_b[index] if len(b) <= index or not b else b[index]
print(a, b)
结构是这样的:
VAR = DEFAULT_VALUE[INDEX] if len(VAR) <= INDEX or not VAR else VAR[INDEX]
不确定这是否真的是 pythonic,但您可以使用包含 None
的数组扩展 sys.argv
并将其切片。然后你只需要根据 None
:
测试值
input, output = (sys.argv + [None] * 2)[:2]
if input is None: input = defaultValue1
if output is None: output = defaultValue2
或者在一个班轮中:
defaultValues = [defaultValue1, defaultValue2]
input, output = (val if val is not None else defaultValues[i]
for i, val in enumerate((sys.argv + [None] * 2)[:2]))
接近口味问题...
当我访问 list/array 索引超出范围?
import sys
input = sys.argv[1]
output = sys.argv[2]
当程序 运行 参数不超过 2 个时,这可能会导致 IndexError
。但是,如果我想说 argv[1]
和 argv[2]
有默认值,那么我应该这样写:
import sys
input = len(sys.argv) > 1 ? sys.argv[1] : DefaultValue1
output = len(sys.argv) > 2 ? sys.argv[2] : DefaultValue2
除了 try
之外,是否有任何 pythonic 方法来缩短此语句?
(类似于 pythonic 空合并运算符的 name = input or "Not set"
)
Related post? (using or
operator)
在 default_val_a
和 default_val_b
中设置您的默认值,并在 index
中设置您的索引 a 是您的 sys.arg[1]
,b 是您的 sys.arg[2]
。这是我能想到的最pythonic和单行的方式:
import sys a = [1] b = [] default_val_a = [1, 2, 3] default_val_b = [4, 5, 6] index = 1 a = default_val_a[index] if len(a) <= index or not a else a[index] b = default_val_b[index] if len(b) <= index or not b else b[index] print(a, b)
结构是这样的:
VAR = DEFAULT_VALUE[INDEX] if len(VAR) <= INDEX or not VAR else VAR[INDEX]
不确定这是否真的是 pythonic,但您可以使用包含 None
的数组扩展 sys.argv
并将其切片。然后你只需要根据 None
:
input, output = (sys.argv + [None] * 2)[:2]
if input is None: input = defaultValue1
if output is None: output = defaultValue2
或者在一个班轮中:
defaultValues = [defaultValue1, defaultValue2]
input, output = (val if val is not None else defaultValues[i]
for i, val in enumerate((sys.argv + [None] * 2)[:2]))
接近口味问题...