代码正在运行,但我正在寻找有关如何更恰当地编写这些代码的提示,尤其是if的使用。正如你所知道的那样,我本质上不是程序员...只是一个系统管理员在python中做一点点摆弄。感谢您提供的任何建议。
def findallWileyLinks():
pagebase = 'http://onlinelibrary.wiley.com'
journallist = 'http://onlinelibrary.wiley.com/browse/publications?type=journal&&start=0&resultsPerPage=3000'
inputList = getinputList()
if inputList:
alljournallistsoup = BeautifulSoup(getwebpage(journallist))
if alljournallistsoup:
alljournallisttags = alljournallistsoup.find('ol', attrs={'id' : 'publications'})
for eissn in inputList:
journalatag = alljournallisttags.find('a', attrs={'href' : re.compile(eissn.rstrip() + '$')})
if journalatag:
journalsoup = BeautifulSoup(getwebpage(pagebase + journalatag.get('href') + '/issues'))
if journalsoup:
allvolumetags = journalsoup.find('ol', attrs={'class' : 'issueVolumes'})
volumeatags = allvolumetags.findAll('a')
for volumeatag in volumeatags:
volumesoup = BeautifulSoup(getwebpage(pagebase + volumeatag.get('href')))
if volumesoup:
allissuetags = volumesoup.find('li', attrs={'id' : volumeatag.get('id')[:-5]})
issueatags = allissuetags.findAll('a')[1:]
for issueatag in issueatags:
currentlinksavailiable.append(pagebase + issueatag.get('href') + '\n')
else:
appendlog('eISSN: ' + eissn.rstrip() + ' not found on alljournallist page.')
try:
with open(inputDirectory + selectedPublisher + '_currentlinksavailiable.txt', 'w') as f:
f.writelines(currentlinksavailiable)
except IOError as e:
appendlog('findallLinks() Operation failed probably when creating the new link text file with error: %s' % e.strerror)
答案 0 :(得分:3)
对我而言,有一件事就是你有很多形式的代码:
tags = parenttag.findAll('tag')
if tags:
for tag in tags:
# do something to tag
我们保证tags
是一个列表,因此if tags:
行是多余的。如果在for
循环中使用空列表,则不执行循环体。
作为一个小点,文件的开头inputList = []
可以在您使用函数调用立即覆盖它时删除。
目前尚不清楚这是否是更大脚本的一部分,但如果不是,那么在if
块中包含脚本正文时,如果inputList
是if not inputList:
sys.exit(1)
,则应该终止空。
if inputList:
# process inputList
而不是
import sys
您需要在脚本顶部添加{{1}}才能使其正常工作。
答案 1 :(得分:1)
您可以将代码放在函数中,并使大多数if语句为负,并使用return,continue或break语句。这样可以避免这么多缩进。
此外,在for循环之前有一个if语句看起来不需要,因为如果列表为空,则跳过for循环。 即
if volumeatags:
for volumeatag in volumeatags:
...
答案 2 :(得分:0)
很多代码都是不必要的。一些例子:
inputList = []
inputList = getinputList()
在Python中,您不需要在为其分配数据之前初始化变量。第二行本身就没问题。
if volumeatags:
for volumeatag in volumeatags:
如果volumeatags
为空,则for循环不会执行。
答案 3 :(得分:0)
我认为在这里要求重写是不常见的。无论如何,这是我的反馈。
if foo:
if bar:
#code
替换为(asusming,你在def
内,但你是,对吗?
if not foo:
return
if bar:
#code
注释应以hash-blank-uppercase开头,为已注释掉的代码保留hash-lowercase。 Peter Norvig似乎在文本评论中加入了两个破折号。无论如何,你有太多的评论。代码应该足够描述。如果操作块需要一个descritive头,请在函数中移动它并使用此描述作为函数名。它也有助于隔离事物。
请勿使用for foo
保护if foo
次圈,如其他答案中所述。
inputList = []
没用,而且不符合PEP08,请尝试input
。