2013-12-23 3 views
0

У меня есть txt-файл с именем test.txt с 4 строками в нем. Я хочу скопировать строки, содержащие слово «исключение», в новый файл из аргумента командной строки. Мне это удалось. Но я также хочу, чтобы исключение обрабатывало это для ошибки ввода-вывода. То есть, если из командной строки кто-то ошибочно называет слово test.txt, он выдает исключение. Это мой текущий код. Пожалуйста помоги! Я новичок. В настоящее время, если я ошибочно намереваюсь сделать это, он не покажет сообщение об ошибке, которое я намерен показать.Ошибка копирования копии файла Python

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() 
+1

Пожалуйста, исправить свои отступы - весь ваш код Python должен использовать одинаковое количество отступов для каждого уровня блока, где, когда вы используете комбинацию из 1, 2 и 4 пробелов. 4 пространства являются стандартными, но последовательность важнее (и, по крайней мере, использует более 1). – Iguananaut

ответ

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 

, а затем обработать запись файла назначения с попробуйте кроме блока.

0

Вы должны поместить open() внутри try - блок except, так же, как вы это делали в Cat().

В настоящее время вы не зовете Cat() и open() в main() не внутри try - блок except.

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) 
0

Вы забыли назвать Cat()

перед тем

f2 = open(sys.argv[2], 'w') 
Cat(f1) 
for line in f1: 

и в функции Cat вам нужно будет поднять исключение, чтобы остановить выполнение

print('\nIO error!!', filename) 
raise IOError('Invalid filename') 
+0

Также попробуйте использовать инструкцию ["with"] (http://stackoverflow.com/questions/9282967/how-to-open-a-file-using-the-open-with-statement) для открытия файла. В идеале вы хотите закрыть подключения к файлу, если произошла ошибка. – skar

+0

Спасибо большое, ребята! Это сработало – sagarnildass

Смежные вопросы