Python引发错误(在shell中显示),然后执行其余代码[关闭]
Posted
技术标签:
【中文标题】Python引发错误(在shell中显示),然后执行其余代码[关闭]【英文标题】:Python Raise Error (to display in shell) , then do rest of the code [closed] 【发布时间】:2014-08-02 11:47:06 【问题描述】:我有一个名为 dictionary.txt 的文件,它包含一个英文单词、一个空格,然后在每一行中包含该单词的格鲁吉亚语翻译。
我的任务是每当在字典中找到一个没有对应单词的英语单词时(例如,如果该英语单词没有翻译),就会引发错误。
如果我提出ValueError
或类似的东西,它会停止代码。
你能给我一个例子吗(如果没有其他选项,请使用 try)。
def extract_word(file_name):
final = open('out_file.txt' ,'w')
uWords = open('untranslated_words.txt', 'w+')
f = open(file_name, 'r')
word = ''
m = []
for line in f:
for i in line:
if not('a'<=i<='z' or 'A' <= i <= 'Z' or i=="'"):
final.write(get_translation(word))
if word == get_translation(word) and word != '' and not(word in m):
m.append(word)
uWords.write(word + '\n')
final.write(get_translation(i))
word=''
else:
word+=i
final.close(), uWords.close()
def get_translation(word):
dictionary = open('dictionary.txt' , 'r')
dictionary.seek(0,0)
for line in dictionary:
for i in range(len(line)):
if line[i] == ' ' and line[:i] == word.lower():
return line[i+1:-1]
dictionary.close()
return word
extract_word('from.txt')
【问题讨论】:
请告诉我们您的尝试。 请附上你的代码,也不清楚你在问什么。 这个问题对我来说很清楚:/ - 你的任务很简单 - 从你的翻译单词列表中创建一个字典。每个键是英文单词,值是翻译后的单词。如果您在字典中查找一个不存在的键,那么KeyError
将被引发,就像任何其他异常一样,如果您没有捕获它,程序将自动终止。为防止这种情况发生,您可以使用字典的get()
方法,如果键不存在,这将返回None
,然后您可以打印相应的消息。
【参考方案1】:
问题不是很清楚,但我想你可能需要这样的代码:
mydict =
with open('dictionary.txt') as f:
for i, line in enumerate(f.readlines()):
try:
k, v = line.split()
except ValueError:
print "Warning: Georgian translation not found in line", i
else:
mydict[k] = v
如果line.split()
没有找到两个值,则不会进行解包并引发ValueError
。我们捕获异常并打印一个简单的警告。如果没有发现异常(else
子句),则将该条目添加到 python 字典中。
请注意,这不会保留原始文件中的行顺序。
【讨论】:
知道了。看来我不能用“raise”来这样做。我只是想让它像实际错误一样打印出来,都是红色的。不管怎么说,多谢拉。对不起我的英语 您可能需要检查此question 以在终端中打印颜色。 知道了。谢谢。最后我和老师谈了。他说在这个错误之后停止工作是可以的代码)所以它是通过简单的raise ValueError(“Thing”)来完成的。我从 cmets 学到了很多新东西,谢谢大家【参考方案2】:引发错误主要是为了让程序做出反应或终止。在您的情况下,您可能应该只使用 Logging API 向控制台输出警告。
import logging
logging.warning('Failed to find Georgian translation.') # will print a warning to the console.
将产生以下输出:
WARNING:root:Failed to find Georgian translation.
【讨论】:
谢谢,但它必须引发错误,警告不是解决方案,但我会记住它【参考方案3】:你应该看看this
f = open('dictionary.txt')
s = f.readline()
try:
g = translate(s)
except TranslationError as e:
print "Could not translate" + s
假设 translate(word)
当然会引发 TranslationError。
【讨论】:
以上是关于Python引发错误(在shell中显示),然后执行其余代码[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
在python中使用liblas和laspy读取las文件的问题