Python:如何在没有错误的情况下引用可选变量

时间:2013-10-12 06:01:02

标签: python variables plot legend optional

我正在尝试为包含可变数据集的绘图创建图例。至少有2个,最多5个。前两个将始终存在,但其他三个是可选的,那么如何仅为现有数量的数据集创建图例?

我已经尝试过if语句告诉python如果该变量不存在该怎么办,但是没有用。也许这不是确定变量存在的正确方法。

line1 = os.path.basename(str(os.path.splitext(selectedFiles[0])[0]))
line2 = os.path.basename(str(os.path.splitext(selectedFiles[1])[0]))

if selectedFiles[2] in locals:
    line3 = os.path.basename(str(os.path.splitext(selectedFiles[2])[0]))
else: line3 = None

if selectedFiles[3] in locals:
    line4 = os.path.basename(str(os.path.splitext(selectedFiles[3])[0]))
else: line4 = None

if selectedFiles[4] in locals:
    line5 = os.path.basename(str(os.path.splitext(selectedFiles[4])[0]))
else:line5 = None

legend((line1, line2, line3, line4, line5), loc='upper left')

以下是我遇到的错误:

     if selectedFiles[2] in locals:
IndexError: tuple index out of range

他的代码可能存在多个问题(不确定“无”是否是处理不存在数据的正确方法)。请记住,我是python的新手,否则很少有编程经验,所以请耐心等待,尽量不要屈尊俯就,因为一些更有经验的用户倾向于这样做。

3 个答案:

答案 0 :(得分:2)

我不知道你的数据结构是什么样的,但看起来你只是想要

lines = (os.path.basename(str(os.path.splitext(x)[0])) for x in selectedFiles)

legend(lines, loc='upper left')

答案 1 :(得分:2)

因为selectedFiles是一个元组,并且处理其中每个项目的逻辑是相同的。你可以使用for循环迭代它。

lines = [os.path.basename(str(os.path.splitext(filename)[0])) for filename in selectedFiles]

#extend lines' length to 5 and fill the space with None
lines = lines + [None] * (5-len(lines))

legend(lines,loc='upper left')

答案 2 :(得分:0)

我更喜欢这种方式。

line = []

for i in range(5):
  if i < len(selectedFiles):
    line.append(os.path.basename(str(os.path.splitext(selectedFiles[i])[0])))
  else:
    line.append(None)

legend(tuple(line), loc='upper left')

或者您可以随时使用except IndexError: