2013-03-28 4 views
3

В моем скрипте у меня есть один большой While: try: loop. В этом, я хочу, чтобы увеличить некоторые указатели в том случае, когда картина была успешно загружена с моей камеры и изменением размеров, вот что мой код выглядит в моем большем питоне скрипт:Недопустимый синтаксис в заявлении try python

import os.path 
try os.path.isfile('/home/pi/CompPictures' + picturenumber + '.JPG'): 
    os.system('sudo rm /home/pi/Pictures/IMG_0001.JPG') 
    os.system('sudo rm /home/pi/output.bin') 
    picturenumber = int(picturenumber))+1 
except: 
    pass 

picturenumber содержит строку ' 1 ', чтобы начать, а затем увеличится.

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

Я получаю следующее сообщение об ошибке.

File "pijob.py", line 210 
    try os.path.isfile('/home/pi/CompPictures' + picturenumber + '.JPG'): 
     ^
SyntaxError: invalid syntax 

Очень новый для питона ... так надеюсь, что это не просто ошибка :(

ответ

6

Вам нужна новая линия и :. Попробуйте следующее:

try: 
    os.path.isfile('/home/pi/CompPictures' + picturenumber + '.JPG') # 
    os.system('sudo rm /home/pi/Pictures/IMG_0001.JPG') 
    os.system('sudo rm /home/pi/output.bin') 
    picturenumber = int(picturenumber))+1 
except: 
    pass 

Вы можете включить finally инструкции для выполнения коды независимо от результата:

try: 
    #code 
except: 
    pass 
finally: 
    #this code will execute whether an exception was thrown or not 
+0

Спасибо! Мне нужен код, который проверяет, существует ли файл, а затем, если он это делает, удалите некоторые файлы и увеличьте указатель. Кажется, что оператор try не может быть лучшим, так как независимо от того, что он удаляет файлы и увеличивает указатель независимо от того, существует ли файл. Может быть, мне нужно попробовать другое заявление? – user2208604

+0

Вы можете проверить, существует ли файл: 'if filename в os.listdir ('путь/to/dir'):'. Это помогает? – That1Guy

+0

Похоже было бы. Является ли синтаксис просто , если filename в os.listdir ('путь/to/dir'): без синтаксиса типа «выход»? спасибо! – user2208604

5

попробовать, как это,

import os.path 
try : 
    os.path.isfile('/home/pi/CompPictures' + picturenumber + '.JPG') # 
    os.system('sudo rm /home/pi/Pictures/IMG_0001.JPG') 
    os.system('sudo rm /home/pi/output.bin') 
    picturenumber = int(picturenumber))+1 
except: 
    pass 

питон синтаксис попробовать,

try: 
    some_code 
except: 
    pass 
+0

Быстрый вопрос, если он проходит через try и попадает в первый файл os.path.isfile и не может открыть файл ... что происходит? он выходит из попытки? – user2208604

+0

@ user2208604 Если во время выполнения предложения try возникает исключение, остальная часть предложения пропускается. Затем, если его тип соответствует исключению, названному после ключевого слова except, выполняется условие except, а затем выполнение продолжается после инструкции try. http://docs.python.org/3/tutorial/errors.html # handling-exceptions –

+0

Может быть, мне нужно попробовать что-то другое, кроме инструкции try, потому что я хочу только две команды os.system и увеличить один файл для увеличения, если этот файл существует. Если файл не существует, я хочу выпрыгнуть из этого и продолжить с моим большим циклом сценария. Не могли бы вы, возможно, указать мне в правильном направлении что-то для этого? Благодарю. – user2208604

1

Синтаксиса для Try/за исключением Python является

try: 
    # code that might raise the exception 
    pass 
except <exceptions go here>: 
    # code that should happen when the 
    # specified exception is/exceptions are 
    # raised 
    pass 
except <other exceptions go here>: 
    # different code that should happen when 
    # the specified exception is/exceptions 
    # are raised 
    pass 
else: 
    # code that follows the code that 
    # might raise the exception, but should 
    # only execute when the exception isn't 
    # raised 
    pass 
finally: 
    # code that will happen whether or not 
    # an exception was raised 
    pass 

Несколько общих принципов:

  • Если вы действительно не хотите, чтобы ваш код молча обрабатывал все исключения, улавливать определенные исключения. Это позволит вам лучше обрабатывать все, что пойдет не так.
  • При использовании нескольких блоков except поместите блоки с более конкретными исключениями выше (т. Е. Убедитесь, что подклассы исключений появляются перед их базой). Победит первый блок с соответствующим исключением.
  • Место как можно меньше кода под try. Любой код, который может вызвать исключение, которого вы ожидаете, принадлежит try; любой код, который должен выполняться только тогда, когда исключение не возникает, должно зайти внутрь else. Таким образом, если он вызывает исключение, вы не ожидали, что он не будет раздавлен.

Кроме того, вы можете взглянуть на subprocess module вместо os.system().

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