1

以下のコードを確認してください。

import sys
try:
    seq=eval(raw_input("Enter seq number: "))
    if seq <= 0 or seq >= 9999:
       print "Sequence number not in range [0001-9999]"
       sys.exit(1)
except:
      print "!!! Sequence number not in range [0001-9999]"
      sys.exit(1)

eval raw_input関数に文字列を与えました。

$> python test.py
Enter seq number: "12"


Sequence number not in range [0001-9999]
!!! Sequence number not in range [0001-9999]

exit電話を受けても終了しないのはなぜですか?

4

3 に答える 3

8

sys.exit例外()を発生させるだけSystemExitで、それがキャッチされます。デモンストレーションとして:

import sys
import traceback

try:
    sys.exit(1)
except:
    print "This threw the following exception:"
    traceback.print_exc()
# This threw the following exception:
# Traceback (most recent call last):
#   File "test.py", line 5, in <module>
#     sys.exit(1)
# SystemExit: 1
于 2013-01-28T18:18:37.313 に答える
3

sys.exitSystemExit名前のない例外ハンドラーによってキャッチされた例外を発生させます

ここで明らかなように、通常、一般的な例外ハンドラーを使用することはお勧めできません。

一般的な例外ハンドラーでキャッチされないように、SystemExit別の例外ハンドラーを追加して、SystemExit

>>> try:
    seq=eval(raw_input("Enter seq number: "))
    if seq <= 0 or seq >= 9999:
       print "Sequence number not in range [0001-9999]"
       sys.exit(1)
except SystemExit:
    pass
except Exception:
      print "!!! Sequence number not in range [0001-9999]"
      sys.exit(1)
于 2013-01-28T18:19:21.893 に答える
1

これは、を除いてベアを使用してはならない優れたケースです。無効な数値はValueErrorsであるため、次のようになります。

import sys
try:
    seq = int(raw_input("Enter seq number: "))
    if seq <= 0 or seq >= 9999:
       raise ValueError('sequence number not in range [0001-9999]')
except ValueError as e:
    print e
    sys.exit(1)

出力:

C:\>test
Enter seq number: 10000
sequence number not in range [0001-9999]

C:\>test
Enter seq number: abc
invalid literal for int() with base 10: 'abc'

C:\>test
Enter seq number: 5

Noteevalは、ユーザーが入力したもの(。など)を実行するため、眉をひそめますimport shutil; shutil.rmtree('/')

于 2013-01-28T18:27:21.067 に答える