Что ж, я сделал модуль, который позволяет вам проще копировать файл в каталог. Теперь у меня также есть несколько «попыток» и «исключений», чтобы убедиться, что он не дает большого беспорядка и не закрывает терминал, но я также хочу, чтобы он отображал разные сообщения об ошибках, когда неправильная строка или переменная вставлена и завершает модуль, но не ... если можно так сказать, Терминал запускает его, поэтому я сделал следующее:

def copy():
    import shutil
    import os
    try:
        cpy = input("CMD>>> Name of file(with extension): ")
        open(cpy, "r")
    except:
        print("ERROR>>> 02x00 No such file")
    try:
        dri = input("CMD>>> Name of Directory: ")
        os.chdir(dri)
        os.chdir("..")
    except:
        print("ERROR>>> 03x00 No such directory")
    try:
        shutil.copy(cpy, dri)
    except:
        print("ERROR>>> 04x00 Command Failure")

Проблема в том, что модуль не заканчивается, если нет файла или каталога, а только на конце.

0
Galilsnap 26 Июн 2010 в 05:36

2 ответа

Лучший ответ

Вы можете подумать, что при возникновении исключения Python просто прекращает свои действия, но это не совсем так. Блок except: фактически перехватывает возникшее исключение и должен его обрабатывать. После завершения блока except: Python продолжит выполнение остальной части кода в файле.

В вашем случае я бы поставил return после каждого print(...). Таким образом, после того, как Python распечатает сообщение об ошибке, он также вернется из функции copy(), а не продолжит запрашивать дополнительные данные.

2
David Z 26 Июн 2010 в 01:54

Если вы действительно хотели, чтобы модуль завершал работу при ошибке ...

Вот как бы вы это сделали.

def copy():
    import shutil
    import os
    import sys
    try:
        cpy = input("CMD>>> Name of file(with extension): ")
        open(cpy, "r")
    except:
        sys.exit("ERROR>>> 02x00 No such file")
    try:
        dri = input("CMD>>> Name of Directory: ")
        os.chdir(dri)
        os.chdir("..")
    except:
        sys.exit("ERROR>>> 03x00 No such directory")
    try:
        shutil.copy(cpy, dri)
    except:
        sys.exit("ERROR>>> 04x00 Command Failure")

Обычно используются sys.exit (0) (для успеха) и sys.exit (1) (для отказа), но, поскольку вы хотите вывести ошибку, приведенный выше пример выведет строку ошибки в stderr.

Вот ссылка для получения дополнительной информации о sys.exit ().

0
Evan Plaice 26 Июн 2010 в 06:20