关于python:获取错误:Getting error: AttributeError: class has no attribute ‘

Getting error: AttributeError: class <CLASS NAME> has no attribute '<METHOD NAME>'

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 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。所以,我有两个班(勾选"jira")和(选项)三。check_jira有两个函数:verify_commit_text()和checkforjiraissuerecord()。4。我将对象作为参数传递给checkforjiraissuerecord,因为我将把参数传递给它,关于它的用法。5。不知道如何从同一类中的另一个函数调用一个函数6。我得到的错误是:

1
2
3
4
5
6
7
8
9
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

class Check_jira在第25行结束,只有一种方法。然后有一个if块,CheckForJiraIssueRecord只是这个块中定义的一个函数(也就是说,函数是if __name__ == '__main__'定义的)。

在整个类定义之后,只需将if块放在外面。