避免在python中的其余行

时间:2012-01-18 21:47:50

标签: python dictionary

嗨我正在尝试使用,但是当我从打印输出时,除非还有更多信息,它继续阅读它 当我使用break时,它会给出外部循环中断的错误。 如何阻止python读取其余行? 感谢

def translate_word(word):

    try:
        return dictionary[word]
    except KeyError:
        print 'The ' + str(language) + ' word for ' + str(word) + ' is not found'

if language == "Italian" :
    create_dictionary('Italian')
    print "The Italian word for " + str(word) + " is " + str(translate_word(word))

它打印出来像这样:

The Italian word for rubbish is not found

The Italian word for rubbish is None

我只想把它作为:

The Italian word for rubbish is not found

5 个答案:

答案 0 :(得分:2)

嗯,是的,如果您的代码中有两个print语句,并且两个语句都已执行,那么您将获得两行输出。

问题的根源在于你的translate_word()函数做了两件事:

  1. 如果单词在词典中
  2. ,则返回翻译
  3. 如果单词不在词典中,则会输出错误消息
  4. 在你的功能之外,当你打电话给它时,你无法告诉它发生了什么。因此,如果单词不在字典中,则会发生两件事:

    1. translate_word()函数会输出错误消息
    2. print语句打印translate_word()的返回值,因为在这种情况下您没有返回任何内容,None
    3. 它仍然执行第二个print的原因是因为你没有告诉它不要!

      这段代码有点乱。有时你的函数会返回一个翻译,有时则不然。有时它会打印一条消息,有时却不打印。这使得调用者(在本例中为您)很难规划程序的其余部分。

      你应该做的是重写你的translate_word()函数,以便它做一件事:返回翻译的单词。如果不能,则应返回None

      def translate_word(word):
          return dictionary.get(word, None)
      

      (不需要进行异常处理;字典的get()方法为您完成此操作。实际上,您根本不需要该函数 - dictionary.get(word, None)不会比{{translate_word(word)长。 1}} - 但我们假设在一个更大的程序中它会做一些其他的东西,需要它自己的功能。而且,它稍微更具可读性。)

      我们返回None而不是字符串“not found”,以便我们可以在必要时轻松区分以下两种情况:

      1. 字典
      2. 中找不到该字词
      3. 这个词在字典中找到,其翻译是英文单词“not found”
      4. None不是字符串,因此它永远不会是任何内容的翻译。这样可以安全地用作表示无法找到单词的标志值。

        当您调用该函数时,您将测试返回值以查看是否找到该单词。如果是这样,您可以打印翻译的单词。否则,您可以打印错误消息。

        translated_word = translate_word(word)
        if translated_word is None:
            print "The Italian word for %s is not found" % word
        else:
            print "The Italian word for %s is %s" % (word, translated_word)
        

        这样,所有执行类似操作的代码都在一个地方,并且很容易理解和推理。这被专业程序员称为关注点分离。将每个代码块做一件事只做一件事被认为是一种好习惯,因为它更容易理解,编写和维护。特别是,将程序的输入/输出和数据操作部分分开几乎总是会使它更直接。

        考虑一下:你忘记了你的程序在做什么,而你的程序只有不到十行。想象一下,如果它有一百万行并且你没有编写它,那么理解这样的程序是多么困难!

        有一些方法可以进一步简化此代码:

        translated_word = translate_word(word)
        print "The Italian word for %s is %s" % (word,
            translated_word if translated_word else "not found")
        

        现在你在谈论Python!

答案 1 :(得分:1)

您通常break离开循环:

for line in open('filename', 'r'):
  if line is 'foo':
    break

  # Line isn't foo. Keep going

答案 2 :(得分:1)

然后你应该这样做:

result = dictionary.get(word, 'Not Found')
print "The Italian word for " + str(word) + " is " + result

来自official documentation
get(key[, default]) 如果key在字典中,则返回key的值,否则返回默认值。

更新: get甚至可用于评论中的代码。

示例:

create_dictionary('Spanish').get(word, 'Not Found')

答案 3 :(得分:0)

您可以使用简单的dict.get完全替换该函数:

if language == "Italian" :
    create_dictionary('Italian')
    print "The Italian word for " + str(word) + " is " + dictionary.get(word, "not found")

答案 4 :(得分:0)

使用::

numCheck = 1
def translate_word(word):  
 try:         
  return dictionary[word]     
 except KeyError:         
  print 'The ' + str(language) + ' word for ' + str(word) + ' is not found'  
  numCheck = 0

if language == "Italian" and numCheck != 0:     
 create_dictionary('Italian')     
 print "The Italian word for " + str(word) + " is " + str(translate_word(word))

应该有所帮助。如果没有更多操作要做,可以使用exit()从脚本中转义。