Python 3.x Python中的简单多变量循环在片大小上失败,而它应该可以正常工作
见下面的代码:Python 3.x Python中的简单多变量循环在片大小上失败,而它应该可以正常工作,python-3.x,for-loop,slice,Python 3.x,For Loop,Slice,见下面的代码: #!/opt/rh/python33/root/usr/bin/python import sys print( sys.argv[1:-1] ) if ( len( sys.argv ) < 5 or len( sys.argv ) % 3 != 2 ) : print( '''Oy vey! You need to input: <1lib name> <1schematic name > <nview name> .. &l
#!/opt/rh/python33/root/usr/bin/python
import sys
print( sys.argv[1:-1] )
if ( len( sys.argv ) < 5 or len( sys.argv ) % 3 != 2 ) :
print( '''Oy vey! You need to input: <1lib name> <1schematic name > <nview name> .. <nlib name> <nschematic name > <nview name> <output fname>''' )
exit ( 1 )
print( len( sys.argv[1:-1] ) )
for lib_name,cell_name,view_name in sys.argv[1:-1] :
print( "lib is:" + lib_name )
print( "cell is:" + cell_name )
print( "view is:" + view_name )
#/opt/rh/python33/root/usr/bin/python
导入系统
打印(sys.argv[1:-1])
如果(len(sys.argv)<5或len(sys.argv)%3!=2):
打印(“'Oy vey!您需要输入:…”)
出口(1)
打印(len(sys.argv[1:-1]))
对于sys.argv[1:-1]中的库名称、单元格名称、视图名称:
打印(“库是:”+lib\u名称)
打印(“单元格为:”+单元格名称)
打印(“视图为:”+视图名称)
这段代码应该非常简单。我正在运行代码,但出现错误:
~]./run_automated_block.py ko lo pm do
['ko', 'lo', 'pm']
3
Traceback (most recent call last):
File "~/run_automated_block.py", line 8, in <module>
for lib_name,cell_name,view_name in sys.argv[1:-1] :
ValueError: need more than 2 values to unpack
[~]$
~]./运行\u automated\u block.py ko lo pm do
['ko'、'lo'、'pm']
3.
回溯(最近一次呼叫最后一次):
文件“~/run\u automated\u block.py”,第8行,在
对于sys.argv[1:-1]中的库名称、单元格名称、视图名称:
ValueError:需要2个以上的值才能解包
[~]$
我不明白。切片的长度是3。for循环中有3个变量。当您在
sys.argv[1:-1]
列表上迭代时,您一次迭代一个元素,而不是您可能认为的三个元素,因此它自然会抱怨无法解包ko
(lo
,pm
)分为三个变量-如果参数本身的长度为3(例如,ko1lo1po1
),那么它将解压单个字符
如果您坚持这样做,您可以将值压缩成三个元组:
for lib_name, cell_name, view_name in zip(*[iter(sys.argv[1:-1])]*3):
print("lib is:" + lib_name)
print("cell is:" + cell_name)
print("view is:" + view_name)
这是处理cli参数的糟糕方法。为什么不使用
argparse
?