edit: ОК, я могу поклясться, что способ, которым я тестировал это, показал, что getcwd также вызывал исключение, но теперь кажется, что это просто создание файла. Когда я перемещаю блоки try-Кроме их, они действительно ловят это так, как вы думаете. Так что мелом до ошибки пользователя.
Оригинальный вопрос:
У меня есть скрипт, над которым я работаю, и я хочу, чтобы можно было добавить в него файл, чтобы он запускался с этим файлом в качестве аргумента. Я проверил этот вопрос , и у меня уже есть упомянутые ключи реестра (по-видимому, об этом позаботится установщик Python 2.6.) Однако, он выдает исключение, которое я не могу поймать. Запуск его из консоли работает правильно, но когда я добавляю в него файл, он генерирует исключение, а затем закрывает окно консоли. Я попытался перенаправить стандартную ошибку в файл, но он выдал исключение до того, как в скрипте произошло перенаправление. После небольшого тестирования и быстрого взгляда я увидел, что при попытке создать файл для записи ошибки в него выдается ошибка IOError.
import sys
import os
#os.chdir("C:/Python26/Projects/arguments")
try:
print sys.argv
raw_input()
os.getcwd()
except Exception,e:
print sys.argv + '\n'
print e
f = open("./myfile.txt", "w")
Если я запускаю это из консоли с какими-либо аргументами или без них, оно ведет себя так, как и следовало ожидать. Если я запускаю его, перетаскивая на него файл, например, test.txt, он запускается, правильно печатает аргументы, затем при вызове os.getcwd () выдает исключение и не выполняет никаких действий из исключение: блок, из-за чего мне трудно найти какой-либо способ получить текст исключения, чтобы остаться на экране. Если я раскомментирую os.chdir (), скрипт не потерпит неудачу. Если я перемещу эту строку в блоке исключений, она никогда не будет выполнена.
Я предполагаю, что работает, сбросив на него файл, который, согласно другому связанному вопросу, использует WSH, каким-то образом портит его разрешения или cwd, но я не знаю, как обойти это.