4

私のスクリプト内には、大きな While: try: ループが 1 つあります。この中で、写真がカメラから正常にダウンロードされ、サイズが変更された場合に備えて、いくつかのポインターを増やしたいと考えています。これが、より大きな 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' が含まれており、その後増加します。

これを実行したいのは1つだけです。したがって、基本的には、より大きなコードを継続的に実行しています。次に、より大きなループをスイープするたびに、この try ステートメントを一度チェックし、ファイルが存在する場合は、いくつかのファイルを削除してポインターを増やします。

次のエラーが表示されます。

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

Python は非常に新しいので、単純な間違いではないことを願っています :(

4

3 に答える 3

7

改行と:. これを試して:

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
于 2013-03-28T15:40:09.567 に答える
6

このようにしてみて、

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

python try 構文、

try:
   some_code
except:
   pass
于 2013-03-28T15:39:52.590 に答える
1

Python での try/except の構文は次のとおりです。

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モジュールos.system()を確認することもできます。

于 2013-03-28T16:07:02.330 に答える