这里有完整的脚本:http://pastebin.com/d6isrghF
我会承认我是 非常 Python的新手,所以如果这是一个容易回答的问题,请原谅我的愚蠢。有问题的部分是:
sourcePath = jobPath
while os.path.basename(sourcePath):
if os.path.basename(os.path.dirname(sourcePath)).lower() == category.lower():
break
else:
sourcePath = os.path.dirname(sourcePath)
if not os.path.basename(sourcePath):
print "Error: The download path couldn't be properly determined"
sys.exit()
jobPath正在从sabnzbd提供给脚本,并且是:
/mnt/cache/.apps/sabnzbd/complete/name.of.folder
类别是:
tv
所以我想我的问题是:为什么这会因错误而失败?
答案 0 :(得分:1)
您的代码无法正常运行,因为在while
未评估os.path.basename(sourcePath)
之前执行True
,然后调用if
语句,因为它看起来像:{{ 1}})显然被评估为if not os.path.basename(sourcePath)
,因此显示了消息(您的“错误”):
True
有时只是因为在路径中找到了类别,这意味着sourcePath = jobPath
# This is executed until os.path.basename(sourcePath) is evaluated as true-ish:
while os.path.basename(sourcePath):
if os.path.basename(os.path.dirname(sourcePath)).lower() == category.lower():
break
else:
sourcePath = os.path.dirname(sourcePath)
# Then script skips to the remaining part, because os.path.basename(sourcePath)
# has been evaluated as false-ish (see above)
# And then it checks, whether os.path.basename(sourcePath) is false-ish (it is!)
if not os.path.basename(sourcePath):
print "Error: The download path couldn't be properly determined"
sys.exit()
循环将被退出(使用while
),即使仍然符合标准(之后的条件) break
关键字:while
)。因为仍然满足来自os.path.basename(sourcePath)
循环的条件(即使满足循环,我们退出循环),不再满足下一个语句的条件(while
)并且消息(“错误”)是没打印。
我相信其中一个解决方案是为您的代码添加一个计数器,只有在特定的迭代次数中,您才能找到所需的内容。您还可以尝试捕获“太多递归”异常(当然,如果您将使用递归,但错误将如下所示:not os.path.basename(sourcePath)
)。
但是,您应该重新设计它,以满足您自己的需求。