我正在尝试从第一个命令行参数中获取文件名输入,如果没有,则从stdin
读取但由于某种原因,我的if
语句似乎不起作用。我把它贴在下面。任何帮助将不胜感激。
import sys
filename=sys.argv[1]
if filename==None:
filename=sys.stdin.readlines()
答案 0 :(得分:2)
在尝试索引之前,您应该检查sys.argv
的长度:
import sys
if len(sys.argv) > 1:
filename=sys.argv[1]
else:
filename=sys.stdin.readline().strip()
sys.argv
中的第一个元素始终是python脚本的文件名,因此是> 1
。
<强> [编辑] 强>
要扩展fixxxer关于is
vs ==
的答案:
is
返回True
。这适用于None
,因为None
是单身人士。另一方面,==
如果比较的变量相等则返回True
,即它们可以指向两个不同(但相等)的对象,==
将产生True
。< / p>
答案 1 :(得分:0)
两件事:
检查变量是否为None的正确方法是:
变量为无:
您的代码可以这样构建:
import sys
if len(sys.argv[1]):
filename=sys.argv[1]
# do your thing
else:
print "list is empty"
答案 2 :(得分:0)
我想知道根据你的代码,流程永远不会到达if块,它会在行filename=sys.argv[1]
中抛出一个IndexError异常,所以你可以试试下面的代码
import sys
try:
filename=sys.argv[1]
except IndexError:
filename=sys.stdin.readlines()