获取错误:AttributeError:类<class name>没有属性'<method name>
这里是代码:
1 #!/usr/bin/env python 2 3 import re, os, sys, jira, subprocess 4 5 class Check_jira: 6 7 def verify_commit_text(self, tags): 8 for line in tags: 9 if re.match('^NO-TIK',line): 10 return True 11 elif re.match('^NO-REVIEW', line): 12 return True 13 elif re.match(r'[a-zA-Z]+-\d+', line): 14 # Validate the JIRA ID 15 m = re.search("([a-zA-Z]+-\d+)",line) 16 if m: 17 my_args = m.group(1) 18 result = Check_jira.CheckForJiraIssueRecord(my_args) 19 if result == False: 20 util.warn("%s does not exist"%my_args) 21 else: 22 return True 23 return True 24 else: 25 return False 26 if __name__ == '__main__': 27 p = Check_jira() 28 commit_text_verified = p.verify_commit_text(os.popen('hg tip --template "{desc}"')) 29 30 if (commit_text_verified): 31 sys.exit(0) 32 else: 33 print >> sys.stderr, ('[obey the rules!]') 34 sys.exit(1); 35 def CheckForJiraIssueRecord(object): 36 37 sys.stdout = os.devnull 38 sys.stderr = os.devnull 39 40 41 try: 42 com = jira.Commands() 43 logger = jira.setupLogging() 44 jira_env = {'home':os.environ['HOME']} 45 command_cat= "cat" 46 command_logout= "logout" 47 #my_args = ["QA-656"] 48 server = "http://jira.myserver.com:8080/rpc/soap/jirasoapservice-v2?wsdl" 49 except Exception, e: 50 sys.exit('config error') 51 52 class Options: 53 pass 54 options = Options() 55 56 options.user = 'user' 57 options.password = 'password' 58 59 try: 60 61 jira.soap = jira.Client(server) 62 jira.start_login(options, jira_env, command_cat, com, logger) 63 issue = com.run(command_cat, logger, jira_env, my_args) 64 except Exception, e: 65 print sys.exit('data error')
所以也许可以这样理解: 1. 如果name == 'main',是不是应该放在最后面呢? 2. 我有两个类,一个是(Check_jira),另一个是(Options)。 3. Check_jira类里面有两个函数,分别是verify_commit_text()和CheckForJiraIssueRecord()。 4. 我把一个对象作为参数传给CheckForJiraIssueRecord,因为在使用的时候我把my_args传给它。 5. 不太确定怎么在同一个类里从一个函数调用另一个函数。 6. 我遇到的错误是:
Traceback (most recent call last): File "/home/qa/hook-test/.hg/check_jira.py", line 31, in commit_text_verified = p.verify_commit_text(os.popen('hg tip --template "{desc}"')) File "/home/qa/hook-test/.hg/check_jira.py", line 21, in verify_commit_text result = Check_jira.CheckForJiraIssueRecord(my_args) AttributeError: class Check_jira has no attribute 'CheckForJiraIssueRecord' transaction abort! rollback completed abort: pretxncommit.jira hook exited with status 1
1 个回答
1
class Check_jira
这个类在第25行结束,并且里面只有一个方法。接下来有一个 if
语句块,而 CheckForJiraIssueRecord
只是这个语句块里定义的一个函数(也就是说,这个函数是在 if __name__ == '__main__'
这个条件下定义的)。
只需要把这个 if
语句块放到整个类定义的外面就可以了。