python-例外とログ

5151 ワード

異常とは、運転期間中に検出されたエラーです.ほとんどの異常はプログラムで処理されず、エラーメッセージの形で表示されます.
プログラムに例外を追加することで、プログラムをより丈夫にすることができます.
具体的な文法は以下の通りです.
try:
      
except     1:
        
except     2:
        

読み取り方法は次のとおりです.
まずtry文を実行し、異常がなければexcept文を無視します.実行中に例外が見つかった場合は、例外文の下の部分を無視してexcept文の部分を実行し、try文の後のコードを実行します.
例:
def test():
    try:
        bcs=int(input('please input bcs:'))
        cs=int(input('please input cs:'))
        s=bcs/cs
        return
    except ZeroDivisionError:
        print('cs cannot be zero!')
test()

出力結果:
please input bcs:1
please input cs:0
cs cannot be zero!

1つのtry文には、異なる特定の例外を処理するために複数のexcept句が含まれる場合があります.最大1つのブランチのみが実行されます.
例:
try:
    a=1/0
    print(a)
except TypeError:
    print('TypeError')
except ZeroDivisionError:
    print('ZeroDivisionError')
except Exception:        #Exception        
    print('Exception')

出力結果:
ZeroDivisionError

注意:エラータイプを書くときは、Exceptionを最後にし、そのサブクラスの例外タイプを前にして、ユーザーにどのようなエラーが発生したかを具体的に示すことができます.
1つのexcept句は、複数の例外を同時に処理することができ、これらの例外はカッコ内に置かれてメタグループになります.
一般的な例外のタイプは次のとおりです.
例外名
説明
BaseException
すべての例外のベースクラス
SystemExit
インタプリタ要求終了
KeyboardInterrupt
ユーザ割り込み実行(通常は入力^C)
Exception
一般的なエラーのベースクラス
StopIteration
反復器にはこれ以上の値はありません
GeneratorExit
ジェネレータに異常が発生し、終了を通知
StandardError
すべての組み込み標準異常のベースクラス
ArithmeticError
すべての数値計算エラーのベースクラス
FloatingPointError
浮動小数点計算エラー
OverflowError
最大限度を超える数値演算
ZeroDivisionError
ゼロを除く(または型を取る)(すべてのデータ型)
AssertionError
アサーション文が失敗しました
AttributeError
オブジェクトにはこの属性がありません
EOFError
組み込み入力なしでEOFタグに到達
EnvironmentError
OSエラーのベースクラス
IOError
入出力操作に失敗しました
OSError
OSエラー
WindowsError
システム呼び出しに失敗しました
ImportError
モジュール/オブジェクトのインポートに失敗しました
LookupError
無効なデータ・クエリーのベース・クラス
IndexError
シーケンスにこのインデックスはありません(index)
KeyError
マッピングにこのキーはありません
MemoryError
メモリオーバーフローエラー(Pythonインタプリタでは致命的ではありません)
NameError
オブジェクトが宣言/初期化されていません(属性なし)
UnboundLocalError
初期化されていないローカル変数へのアクセス
ReferenceError
弱参照(Weak reference)は、ゴミ回収されたオブジェクトにアクセスしようとします.
RuntimeError
一般的なランタイムエラー
NotImplementedError
まだ実現されていない方法
SyntaxError
Python構文エラー
IndentationError
インデントエラー
TabError
Tabとスペースの混在
SystemError
一般的な解釈システムエラー
TypeError
タイプに無効なアクション
ValueError
無効なパラメータが入力されました
UnicodeError
Unicode関連エラー
UnicodeDecodeError
Unicode復号時のエラー
UnicodeEncodeError
Unicode符号化時エラー
UnicodeTranslateError
Unicode変換時エラー
Warning
警告ベースクラス
DeprecationWarning
廃棄されたフィーチャーに関する警告
FutureWarning
将来的に意味が変わるという警告について
OverflowWarning
古いオートリフト長型(long)に関する警告
PendingDeprecationWarning
特性が廃棄される警告について
RuntimeWarning
不審なランタイム挙動(runtime behavior)の警告
SyntaxWarning
不審な文法の警告
UserWarning
ユーザーコード生成の警告
try except文の後にelseも接続できます.else文は異常が発生していない場合に実行されます.exceptの後ろに置く.
finally文:前のいずれにしても、最終的に実行される文.
例:
def list(arr):
    arr[len(arr)]
def finderror(arr):
    try:
        list(arr)
    except Exception as ex:        #as  Exception   
        print(ex)
    finally:
        print('all over')
a=[1,23,4,5,6,77,8]
finderror(a)

出力結果:
list index out of range
all over

例外を放出:
raise文を使用して、ユーザー名、パスワードエラーに一般的に使用される指定された例外をエクスポートできます.
ユーザー定義例外:
ユーザーは、自分のニーズを満たすために新しい例外クラスを作成できます.カスタム例外クラスは通常、Exceptionクラスから継承されます.
例:
class ageException(Exception):
    pass
def doage():
    age=int(input('please input the age:'))
    if age<0 or age>100:
        raise ageException('please input the right number!')
try:
    doage()
except ageException as ag:
    print(ag) 

出力結果:
please input the age:111
please input the right number! 

ログ出力:
ログ出力は、より便利な検出プログラムの実行状態を支援します.pythonでloggingモジュールを呼び出すことができます.
例:
import logging
LOG_FORMAT='%(asctime)s %(filename)s %(message)s'
logging.basicConfig(filename='a.txt',level=logging.DEBUG,format=LOG_FORMAT)
def test():
    try:
        bcs=int(input('please input bcs:'))
        cs = int(input('please input cs:'))
        print(bcs/cs)
        return
    except ValueError:
        logging.debug("      !")
    except ZeroDivisionError:
        logging.info("     0")
    else:
        print("else...")
    finally:
        print("    ")
test() 

プログラムを実行すると、ファイルの兄弟ディレクトリの下にa.txtファイルが作成され、例外情報が記録されます.もちろん、例外情報のみが記録されます.
ログ・レベル:
ログ・レベルには、次のようなものがあります.ルートLoggerを取得すると、デフォルトレベルはNOTSETで、すべての出力が表示されます.ルート以外のLoggerを取得すると、ルートLoggerのデフォルトレベルはWARNINGであり、ルート以外のLoggerはこのレベルを継承し、WARNING以上のログのみが出力されます.
レベル

CRITICAL
50
ERROR
40
WARNING
30
INFO
20
DEBUG
10
NOTSET
0