[英]How can i print a list contents in a stderr statement in python
這是場景:
我希望能夠打印C Style語句:
print >> sys.stderr, ("%s does not exist"%m_args)
在函數內部或在__main__
但我得到異常:
print >> sys.stderr, ("%m_args[1] does not exist"%m_args[1])
IndexError: list index out of range
碼:
#!/usr/bin/env python
import re, os, sys, jira, subprocess
from optparse import OptionParser
import warnings
from collections import namedtuple
global m_args
def verify_commit_text(tags):
for line in tags:
if re.match(r'[^\NO-TIK]',line):
return False
elif re.match(r'[^\NO-REVIEW]', line):
return False
elif re.match(r'[a-zA-Z]+-\d+', line):
# Validate the JIRA ID
m = re.search("([a-zA-Z]+-\d+)",line)
m_args = m.group(1)
m_args = [m_args]
print 'm_args'
print m_args
print type(m_args)
if CheckForJiraIssueRecord(m_args):
return False
else:
#warnings.warn("%s does not exist"%m_args)
print >> sys.stderr, ("%s does not exist"%m_args)
return True
else:
return True
def CheckForJiraIssueRecord(my_args):
# turn off stdout
#sys.stdout = open(os.devnull)
#sys.stderr = open(os.devnull)
com = jira.Commands()
logger = jira.setupLogging()
jira_env = {'home':os.environ['HOME']}
command_name = "cat"
server = "http://jira.server.com:8080/rpc/soap/jirasoapservice-v2?wsdl"
options = namedtuple('Options', 'user password')('user','password')
jira.soap = jira.Client(server)
jira.start_login(options, jira_env, command_name, com, logger)
issue = com.run(command_name, logger, jira_env, my_args)
if issue:
return True
if __name__ == '__main__':
commit_text_verified = verify_commit_text(os.popen('hg tip --template "{desc}"'))
if commit_text_verified:
sys.exit(1)
else:
print >> sys.stderr, ('[obey the rules!]')
print >> sys.stderr, ("%s does not exist"%m_args[0])
sys.exit(0)
看這行:
print >> sys.stderr, ("%s does not exist"%m_args)
來自verify_commit_text()
函數。
現在,查看導致__main__
錯誤的行:
print >> sys.stderr, ("%m_args[0] does not exist"%m_args[0])
您需要用%s
替換字符串中的%m_args[0]
。
另外,您使用的是兩個不同的m_args
-您嘗試從全局的m_args
print
,而您在verify_commit_text()
中verify_commit_text()
了本地版本。 將global m_args
添加到verify_commit_text()
的頂部以消除索引錯誤(對於您的最后一個elif
regex匹配的情況,對於遇到else
子句的情況,您仍然會得到它。)
您似乎還有其他問題。 您在verify_commit_text()
有一個for
循環,但是您只進入了第一次迭代,因為所有if
分支都return
。
您還將sys.stderr
發送到os.devnull
,因此即使print
工作也看不到任何內容。
另外,您的退出條件錯誤。 如果失敗,則返回True
,然后如果結果為True
則使用exit(0)
- if not commit_text_verified:
, if not commit_text_verified:
其更改為if not commit_text_verified:
還有一件事: CheckForJiraIssueRecord(m_args)
沒有return
因此它總是返回None
,因此它所處的if
條件永遠不會為True
-您將始終轉到else
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.