NameError:name' rindex'未定义

时间:2015-12-08 15:45:56

标签: python nameerror

从命令行调用我的python脚本时,传入一个输入字符串(参数1)和一个空字符串(参数2),这将导致我的输出解析我的模块中的输入字符串

C:\Windows\system32>set project_name=

C:\Windows\system32>echo "%project_name%" " "

C:\Windows\system32>"C:\Python27\python" "C:\IR125422\GetProject1.py" "#p=/Product Delivery/Product Delivery.pj#s=Team P rojects/Team Projects.pj#s=Platform Pack/Platform Pack.pj#s=Runtime/Runtime.pj"   project_name

Traceback (most recent call last):   File "C:\IR125422\GetProject1.py", line 5, in <module>
    startpos = rindex("/",stext) NameError: name 'rindex' is not defined

我的python程序将字符串盯着#34;#p&#34;并找到最后一个子字符串&#34; /&#34;在字符串中,然后将该字符串的剩余部分复制到字符串project_name中,从最后一个&#34; /&#34;到字符串的末尾。所以在程序运行之后,project_mane应该包含&#34; runtime.pj&#34;

这是程序

import os, sys
stext = sys.argv[1]
rtext =  sys.argv[2]
startpos = rindex("/",stext)
rtext = stext(startpos+1,len(rtext))
print "Extracting project"
print rtext;

然而,似乎无法识别字符串方法rindex。我是否需要在我的&#34;导入&#34;中添加模块?部分?我认为这不是python中字符串处理所必需的,因为它是python

的内在函数

1 个答案:

答案 0 :(得分:1)

rindex不能作为全局函数使用,而是作为str类的方法。 用法为str.index(self, sub[, start[, end]])。 所以如果你替换这行:

startpos = rindex("/",stext)

使用以下两种方法之一:

startpos = str.rindex(stext, "/")
startpos = stext.rindex("/")

有问题的行应该有效。

但请注意,以下行还包含错误:

rtext = stext(startpos+1,len(rtext))

就像目前一样,你将调用stext就好像它是一个函数,而不是将其索引为可迭代的。 请尝试以下方法:

rtext = stext[startpos+1:]

这将导致原始字符串的“slice”,从startpos + 1开始,到字符串结尾处结束。 因此,您的完整代码无需进一步修改即可:

import os, sys
stext = sys.argv[1]
rtext =  sys.argv[2]
startpos = stext.rindex("/") # This line changed
rtext = stext[startpos+1:]   # This line changed
print "Extracting project"
print rtext;

给出输出:

Extracting project
Runtime.pj

编辑添加:

正如Two-Bit Alchemist所建议的,您的代码也可以稍微清理一下。 对rtext的初始分配没有任何作用,可以省略。 可以通过在字符串中添加换行符并使用format来组合print语句,或者如果您想以某种方式捕获并使用DOS或PowerShell中的输出,您甚至可能想要省略第一个print语句。 这也可能是通过添加括号使print语句对Python3友好的好时机。 此外,Two-Bit Alchemist建议更直接地计算rtext:

rtext = stext.split('/')[-1]

将字符串拆分为每个'/'的列表,然后获取最后一个元素,对应于最后'/'之后的字符串部分,就像当前解决方案一样。 最后,os导入未使用,第二个print语句后面的分号是多余的,因此两者都可以省略。 清理后的代码为:

import sys
stext = sys.argv[1]
rtext = stext.split('/')[-1]
print(rtext)

甚至更紧凑:

import sys
print(sys.argv[1].split('/')[-1])