我有一个名为test.txt的txt文件,里面有4行。我想从命令行参数将包含单词'exception'的行复制到一个新文件中。我做到了这一点。但我也想异常处理这个IO错误。也就是说,如果从命令行开始,有人拼错了单词test.txt,它会抛出一个异常。这是我目前的代码。请帮忙!我是初学者。目前,如果我故意拼错它,它没有显示我打算显示的错误信息。
import sys
def Cat(filename):
try:
f = open(filename, 'rU')
for line in f:
print (line),
return 3
except IOError:
print('\nIO error!!', filename)
def main():
f1 = open(sys.argv[1])
f2 = open(sys.argv[2], 'w')
for line in f1:
if 'exception' in line:
f2.write(line)
if __name__ == '__main__':
main()
答案 0 :(得分:0)
您需要将open()
放在try
- except
块中,就像在Cat()
中一样。
目前,您没有致电Cat()
,open()
中的main()
不在try
- except
区块内。
答案 1 :(得分:0)
既然你说你是Python的初学者,我会假设这是一种“学习代码”。所以,我不会告诉你有关设计的任何信息。另外,你应该做@NPE所说的。
您可以在main
功能中尝试此功能,以实现目标:
def main():
filename = open(sys.argv[1])
if filename != "test.txt":
raise Exception("Here goes the message error you want to show")
f2 = open(sys.argv[2], 'w')
for line in f1:
if 'exception' in line:
f2.write(line)
答案 2 :(得分:0)
首先检查源文件是否存在且可读 -
if not (os.path.exists(file1) and os.access(file1, os.R_OK)):
print "file1 does not exists or not readable"
sys.exit(1)
else:
//good to go
然后使用try除了块来处理目标文件的写入。
答案 3 :(得分:0)
你忘了打电话给Cat()
之前
f2 = open(sys.argv[2], 'w')
Cat(f1)
for line in f1:
在Cat函数中,您需要引发异常以停止执行
print('\nIO error!!', filename)
raise IOError('Invalid filename')