嗨我正在尝试使用,但是当我从打印输出时,除非还有更多信息,它继续阅读它 当我使用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
答案 0 :(得分:2)
嗯,是的,如果您的代码中有两个print
语句,并且两个语句都已执行,那么您将获得两行输出。
问题的根源在于你的translate_word()
函数做了两件事:
在你的功能之外,当你打电话给它时,你无法告诉它发生了什么。因此,如果单词不在字典中,则会发生两件事:
translate_word()
函数会输出错误消息print
语句打印translate_word()
的返回值,因为在这种情况下您没有返回任何内容,None
。它仍然执行第二个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”,以便我们可以在必要时轻松区分以下两种情况:
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()从脚本中转义。