我正在尝试从第一个命令行参数中获取文件名输入,如果没有,则从stdin
读取,但由于某种原因,我的if
语句似乎不起作用。 我把它贴在下面。任何帮助将不胜感激。
import sys
filename=sys.argv[1]
if filename==None:
filename=sys.stdin.readlines()
在尝试索引之前,您应该检查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
与==
的答案:
is
返回True
如果比较的变量指向同一对象。这也适用于None
,因为None
是一个单例。 另一方面,==
,如果比较的变量相等,则返回True
,即它们可以指向两个不同(但相等)的对象,并且==
将产生True
。
我想知道根据您的代码,该流程永远不会到达if块,并且它会在第filename=sys.argv[1]
行中抛出IndexError异常,所以也许您可以尝试以下代码
import sys
try:
filename=sys.argv[1]
except IndexError:
filename=sys.stdin.readlines()
两件事:
- 就像EventLisle说的那样,在继续之前检查sys.argv的大小。
-
检查变量是否为 None 的正确方法是:
变量为"无":
您的代码结构可以如下所示:
import sys
if len(sys.argv[1]):
filename=sys.argv[1]
# do your thing
else:
print "list is empty"