Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的Ignore indexer(类似于列表订阅上的null合并运算符)_Python_Index Error_Null Coalescing Operator - Fatal编程技术网

python中的Ignore indexer(类似于列表订阅上的null合并运算符)

python中的Ignore indexer(类似于列表订阅上的null合并运算符),python,index-error,null-coalescing-operator,Python,Index Error,Null Coalescing Operator,当我访问索引超出范围的列表/数组时,有没有一种python方法可以让python忽略索引器,只返回默认值或None import sys input = sys.argv[1] output = sys.argv[2] 当程序在不超过2个参数的情况下运行时,这可能会导致索引器。但是,如果我想说有argv[1]和argv[2]的默认值,那么我应该这样写: import sys input = len(sys.argv) > 1 ? sys.argv[1] : DefaultValue1 o

当我访问索引超出范围的列表/数组时,有没有一种python方法可以让python忽略
索引器
,只返回默认值或
None

import sys
input = sys.argv[1]
output = sys.argv[2]
当程序在不超过2个参数的情况下运行时,这可能会导致
索引器
。但是,如果我想说有
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之外,有没有其他类似python的方法来缩短这个语句

(如pythonic null colaescing运算符的
name=input或“Not set”


default\u val\u a
default\u val\u b
中设置deafult值,并在
index
中设置索引a是你的
sys.arg[1]
而b是你的
sys.arg[2]
。这是我能想到的最具python风格和单线的方式:

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) 导入系统 a=[1] b=[] 默认值a=[1,2,3] 默认值_val_b=[4,5,6] 索引=1
如果len(a)不确定这是否真的是pythonic,则a=默认值a[索引],但可以使用包含
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]))

接近口味的问题…

使用模块?或者从
sys.argv
列表中制作一个
dict
并使用
dict.get
方法如何?一个比argparse更高级的替代方法是。@AzatIbrakov感谢您向我介绍这个很棒的模块!但是如果我想在没有argparse的情况下解决这个问题,我应该怎么做呢?我应该为列表创建一个字典吗?有注释,但它们是其他东西。这些是装饰器,可以修改类、方法或函数。我不担心
TypeError
,但我担心
IndexOutOfBoundsException
indexer
。这可能会在其他应用程序中使用:)对于一个严肃的应用程序,
argparse
或任何其他真正的命令行解析工具都是必须的。您要求可能的短期实施,我只是提出了一个:-)
defaultValues = [defaultValue1, defaultValue2]
input, output = (val if val is not None else defaultValues[i]
                 for i, val in enumerate((sys.argv + [None] * 2)[:2]))