この記事では、Python のエラー、例外、プログラムのデバッグ方法 (コード付き) を紹介します。一定の参考価値があります。困っている友人は参考にしてください。お役に立てれば幸いです。
例外は、Python プログラムの実行中に発生するエラーです。プログラム内でハンドルされない例外がスローされた場合、プログラムは例外により終了します。プログラムに例外処理を追加することによってのみ、プログラムをより "堅牢にすることができます" 」。
Python には例外を処理するための独自の文法形式があります。Python での例外処理とプログラムのデバッグ方法をマスターします。主な内容は次のとおりです:
1.スペルミス
は、Python 言語のキーワードのスペルミス、変数名、関数名などのスペルミスを指します。
キーワードのスペルが間違っている場合は、SyntaxError (構文エラー)
が表示され、変数名または関数名のスペルが間違っている場合は、NameError エラーが表示されます。実行時にプロンプトが表示されます。スクリプト プログラムは Python の構文仕様に準拠していません。
たとえば、括弧、コロン、その他の記号が欠落しており、式が正しく記述されていません。
3.インデント エラーPython の文法では、インデントがプログラムの文法の 1 つであると規定されており、これは Python 言語の固有の側面であるはずです。一般的に、Python の標準インデントはスペース 4 つです。もちろん、自分の習慣に合わせて Tab を使用することもできます。ただし、同じプログラムまたはプロジェクト内では、同じインデント スタイルを一貫して使用する必要があります。 7.2 例外処理
例外は、Python プログラムの実行中に発生するエラーです。プログラム内でハンドルされない例外がスローされた場合、スクリプトは例外により終了します。プログラム内でこれらの例外をキャッチし、関連する処理を実行することによってのみ、プログラムは中断されなくなります。
try ステートメントは、Python で例外を処理するために使用されます。Python の他のステートメントと同様に、try ステートメントもインデント構造を使用します。try ステートメントもオプションの Selected else ステートメント ブロックがあります。一般的な try ステートメントの基本形式は次のとおりです。
try: <语句(块)> #可能产生异常的语句(块) except <异常名1>: #要处理的异常 <语句(块)> #异常处理语句 except <异常名2>: #要处理的异常 <语句(块)> #异常处理语句 else: <语句(块)> #未触发异常,则执行该语句(块) finally: <语句(块)> #始终执行该语,一般为了达到释放资源等目的
try: <语句(块)> except <异常名1>: <语句(块)>
例:
def testTry (index, flag=False): stulst = ["John","Jenny","Tom"] if flag: #flag为True时,捕获异常 try: astu = stulst [index] except IndexError: print("IndexError") return "Try Test Finished!" else: #flag为False时,不捕获异常 astu =stulst [index] return "No Try Test Finished!" print("Right params testing start...") print (testTry (1, True)) #不越界参数,捕获异常(正常) print (testTry (1, False)) #不越界参数,不捕获异常(正常) print("Error params testing start...") print (testTry (4, True)) #越界参数,捕获异常(正常) print (testTry (4, False)) #越界参数,不捕获异常(程序运行会中断)
フォーム 2:
try: <语句(块)> except < 异常名1>: <语句(块)> finally: <语句(块)>
例:
def testTryFinally (index): stulst = ["John","Jenny", "Tom"] af = open ("my.txt", 'wt+') try: af.write(stulst[index]) except: pass finally: af.close() #无论是否产生越界异常,都关闭文件 print("File already had been closed!") print('No IndexError...') testTryFinally (1) #无越界异常,正常关闭文件 print('IndexError...') testTryFinally (4) #有越界异常,正常关闭文件
7.2 .2 Python の主な組み込み例外とその処理Python の一般的な例外は事前定義されており、対話型環境で dir (__builtins__) コマンドを使用すると、事前定義された例外がすべて表示されます。
#例外名
##AttributeError | |
---|---|
#EOFError | ファイルの終わりに遭遇したことによって発生した例外 |
#ImportError | インポート モジュール エラーによる例外 |
IndexError | リストの範囲外による例外 |
IOError | I/O 操作によって発生する例外 (ファイルを開く際のエラーなど)。 |
KeyError | に存在しないキーワードの使用によって発生する例外。 Dictionary |
NameError | 存在しない変数名の使用により発生する例外 |
TabError | Exceptionステートメント ブロックのインデントが正しくないことが原因です。 |
ValueError | 検索リストに存在しない値によって例外が発生しました。 |
ZeropisionError | 除数はゼロによって発生した例外です |
except语句主要有以下几种用法: except: #捕获所有异常; except <异常名>: #捕获指定异常; except (异常名1,异常名2): #捕获异常名1或者异常名2; except <异常名> as <数据>: #捕获指定异常及其附加的数据; except(异常名1,异常名2)as <数据>: #捕获异常名1或者异常名2及异常的附加数据。 7.3 手工抛出异常为了程序的需要,程序员还可以自定义新的异常类型,例如对用户输入文本的长度有要求,则可以使用raise引发异常,以确保文本输入的长度符合要求。 7.3.1 用raise手工抛出异常使用raise引发异常十分简单,raise有以下几种使用方式。 raise 异常名 def testRaise2(): for i in range (5): try: if i==2: #i==2抛出NameError异常 raise NameError except NameError: print('Raise a NameError!') print (i) print('end...') testRaise2 () 运行结果: 0 1 Raise a NameError! 2 3 4 end... 7.3.2 assert语句assert语句的一般形式如下。 assert <条件测试>, <异常附加数据> #其中异常附加数据是可选的 assert语句是简化的raise语句,它引发异常的前提是其后面的条件测试为假。 举例: def testAssert(): for i in range (3): try: assert i<2 except AssertionError: print('Raise a AssertionError!') print (i) print('end...') testAssert() 运行结果: 0 1 Raise a AssertionError! 2 end... assert语句一般用于在程序开发时测试代码的有效性。比如某个变量的值必须在一定范围内,而运行时得到的值不符合要求,则引发该异常,对开发者予以提示。所以一般在程序开发中,不去捕获这个异常,而是让它中断程序。原因是程序中已经出现了问题,不应继续运行。 assert语句并不是总是运行的,只有Python内置的一个特殊变量__debug__为True时才运行。要关闭程序中的assert语句就使用python-O(短画线,后接大写字母O)来运行程序。 7.3.3 自定义异常类在Python中定义异常类不用从基础完全自己定义,只要通过继承Exception类来创建自己的异常类。异常类的定义和其他类没有区别,最简单的自定义异常类甚至可以只继承Exception类,类体为pass如: class MyError (Exception): #继承Exception类 pass 如果需要异常类带有一定的提示信息,也可以重载__init__和__str__这两个方法。【相关推荐:python视频教程】 |
以上がPython のエラー、例外、プログラムのデバッグ方法の紹介 (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。