2015-12-17 36 views
-1

我有这样的脚本,允许用户通过一个参数输入文件名,然后将其更新的文件版本:从调用函数外的变量使用python

#!/usr/bin/env python 
import os 
import sys 

class versionBumper: 

    def __init__(self): 
     self.version = None 
     self.SavedBefore = "" 
     self.SavedAfter = "" 

    def change_version(self, file_to_be_modded, packageVersion): 
     for line in file_to_be_modded: 
      if packageVersion in line: 
       print "VERSION FOUND: ", line 
       self.VersionNumber = line 
      elif self.VersionNumber is None: 
       self.SavedBefore += line 
      else: 
       self.SavedAfter += line 
     file_to_be_modded.close() 
     print "Version: ", self.VersionNumber 
     return self.VersionNumber 

if __name__ == '__main__': 
    print "sys.argv[1:]:", sys.argv[0:] 
    versionBumper123 = versionBumper() 
    filename = sys.argv[1] 
    path = "/home/Desktop/Crate/Crate/" + filename + "/build/CMakeLists.txt" 

    if os.path.exists: 
     inputFile = open(path, 'r') 

    else: 
     print "no match found" 
     sys.exit() 

    print "Which version number to bump ?" 
    print "1) major" 
    print "2) minor." 
    print "3) patch." 

    Choose_version = raw_input("Choose version: ") 

    if Choose_version == "1": 
     version = versionBumper123.change_version(inputFile, "_MAJOR ") 
    elif Choose_version == "2": 
     version = versionBumper123.change_version(inputFile, "_MINOR ") 
    elif Choose_version == "3": 
     version = versionBumper123.change_version(inputFile, "_PATCH ") 
    else: 
     print "Invalid input. Exiting gracefully..." 
     sys.exit() 

    outputFile = open (path, 'w') 

    splitted_version_line_substrings = version.split('"') 

    Version_Name = splitted_version_line_substrings[0] 
    Version_Number = int(splitted_version_line_substrings[1]) + 1 
    parenthesis = splitted_version_line_substrings[2] 

    new_version = (str(Version_Name) + '"' 
        + str(Version_Number) + '"' 
        + str(parenthesis)) 
    print "new_version: ", new_version 

    outputFile.write(str(versionBumper123.SavedBefore)) 
    outputFile.write(str(new_version)) 
    outputFile.write(str(versionBumper123.SavedAfter)) 

但我不断收到此错误:

Traceback (most recent call last): 
    File "untitled.py", line 57, in <module> 
    splitted_version_line_substrings = version.split('"') 
NameError: name 'version' is not defined. 

我也试图定义version为全局变量,但也没有工作,我真的不能弄清楚如何从它中定义的函数的外部调用version

+1

'version'没有在函数中定义,它是在类中定义的。你是不是指'self.version'?检查你的缩进。 'if __name__ =='__main __':'在类内部,这很不寻常。 'global'应该可以工作,尽管你不会显示代码。这个函数更好的是返回版本,而不是使用全局。 – cdarke

+0

否if __name__ =='__main__'不在类内,那是错误的。我编辑了代码 – leaker

+0

你需要更多的编辑来纠正我认为的缩进,看看'sys.exit()'。同样,'version'没有在函数内部定义。请说明错误来自哪一行。 – cdarke

回答

0

我认为你正在处理你的类的一个实例versionBumper

versionBumper123 = versionBumper() 

所以我要与语句

splitted_version_line_substrings = version.split('"') 

做什么,应表述为

splitted_version_line_substrings = versionBumper123.version.split('"') 

仅仅因为你使用了你的类的单个实例如果你不使用类,你可以编写更简单的代码。