Latest web development tutorials

معالجة الاستثناء الثعبان

يوفر الثعبان وظيفتين هامتين جدا لمعالجة الاستثناءات وأخطاء البرنامج الثعبان الذي يظهر في العملية. يمكنك استخدام هذه الميزة لبرامج بيثون التصحيح.

  • معالجة الاستثناء: بيثون موقع تعليمي وصف محدد.
  • تأكيد (التأكيدات): بيثون موقع تعليمي وصف محدد.

استثناءات بيثون القياسية

اسم استثناء وصف
BaseException الفئة الأساسية لجميع الاستثناءات
SystemExit طلب مترجم للخروج
KeyboardInterrupt العضو المقاطعة تنفيذ (عادة ما تدخل ^ C)
استثناء الفئة الأساسية خطأ عام
StopIteration مكرر أية قيم المزيد
GeneratorExit مولد (مولد) أن تخطر خروج غير طبيعي
StandardError كل من الفئة الأساسية القياسية المدمج في لاستثناءات
ArithmeticError كل العددية الفئة الأساسية خطأ
FloatingPointError خطأ في الحساب الفاصلة العائمة
OverflowError تجاوزت عمليات العددية الحد الأقصى
ZeroDivisionError بالإضافة إلى (أو معامل) صفر (جميع أنواع البيانات)
AssertionError فشل التأكيد
AttributeError هذا الكائن لا يوجد لديه ممتلكات
EOFError لا المدمج في المدخلات وصوله EOF علامة
EnvironmentError التشغيل الطبقة النظام الأساسي الخطأ
IOError عمليات الإدخال / الإخراج إلى فشل
OSError خطأ في نظام التشغيل
WindowsError فشل استدعاء نظام
ImportError استيراد وحدة / فشل كائن
LookupError استفسار قاعدة البيانات فئة غير صالح
IndexError دون هذا المؤشر تسلسل (رقم قياسي)
KeyError دون هذا التعيين الرئيسي
MemoryError خطأ ذاكرة سعة (لبيثون مترجم ليست قاتلة)
NameError غير معلنة / تهيئة الكائن (وليس الملكية)
UnboundLocalError وصول متغير محلي غير مهيأ
ReferenceError وقد الأجسام إشارة ضعيفة (إشارة ضعيفة) يحاول الوصول إلى جمع القمامة من
RuntimeError خطأ وقت التشغيل العام
NotImplementedError لم يتم تنفيذ طريقة
خطأ قواعدي خطأ في بناء الجملة بيثون
IndentationError خطأ البادئة
TabError التبويب والفضاء مزيج
SystemError خطأ في نظام مترجم عادة
TypeError نوع العملية غير صالح
ValueError الحجج الباطلة صدر في
UnicodeError الأخطاء المتعلقة يونيكود
UnicodeDecodeError فك يونيكود الخطأ
UnicodeEncodeError خطأ رمز Unicode
UnicodeTranslateError خطأ تحويل Unicode
تحذير الفئة الأساسية تحذير
DeprecationWarning تحذيرات حول ميزات إهمال
FutureWarning تغيرت تحذيرات حول الهيكل المستقبلي للدلالات
OverflowWarning التحذير من العمر روجت حول تلقائيا إلى عدد صحيح طويل (طويل) ل
PendingDeprecationWarning سيكون تحذيرا حول خصائص النفايات
RuntimeWarning (السلوك وقت التشغيل) تحذير السلوك وقت التشغيل المشبوهة
SyntaxWarning تحذيرات البنية مشبوهة
UserWarning يحذر جيل رمز المستخدم

ما هو غير طبيعي؟

هذا الاستثناء هو الحدث الذي يحدث أثناء تنفيذ البرنامج، التي تؤثر على تنفيذ البرنامج العادي.

في ظل الظروف العادية، عندما برامج بيثون لا يعالج بشكل صحيح حدوث استثناء.

الاستثناء هو كائن بيثون يمثل خطأ.

يحدث استثناء عند تشغيل البرنامج النصي بيثون نحن بحاجة للقبض على التعامل معها، وإلا سيتم إنهاء البرنامج.


معالجة استثناء

يمكنك التقاط الاستثناء باستخدام حاول / باستثناء بيان.

حاول / باستثناء يستخدم بيان للكشف عن الأخطاء في كتلة المحاولة، بحيث باستثناء بيان للقبض على استثناء ومعالجة المعلومات.

إذا كنت لا تريد حدوث استثناء عند نهاية البرنامج، مجرد محاولة للقبض عليه في الداخل.

بناء الجملة:

وفيما يلي محاولة بسيطة .... إلا ... تركيب آخر:

try:
<语句>        #运行别的代码
except <名字>:
<语句>        #如果在try部份引发了'name'异常
except <名字>,<数据>:
<语句>        #如果引发了'name'异常,获得附加的数据
else:
<语句>        #如果没有异常发生

يعمل محاولة، عند بدء بيان المحاولة و، سيتم وضع علامة الثعبان في سياق البرنامج الحالي، حتى أنه عندما يحدث خلل يمكن أن أعود إلى هنا، حاول الشرط يتم تنفيذ أولا، ما يحدث يعتمد المقبل على التنفيذ ما إذا كان هناك استثناء.

  • إذا حدث استثناء عند محاولة تنفيذ عندما البيان بعد، الثعبان القفز إلى الوراء في محاولة لإجراء المطابقة الأول باستثناء بند هو استثناء، اكتمال معالجة استثناء، والتحكم في التدفق على من خلال البيان محاولة بأكمله (الوقت ما لم تتم معالجة استثناء ويؤدي جديدة الاستثناءات).
  • في حالة حدوث خلل في بيان المحاولة بعد سنوات، ولكن لا مطابقة باستثناء بند، وسيقدم استثناء من الجزء العلوي من المحاولة، أو إلى الجزء العلوي من البرنامج (الذي سينتهي البرنامج، وطباعة رسالة خطأ الافتراضي).
  • إذا حدث استثناء عند محاولة لا يتم تنفيذ الشرط، وسيتم تنفيذ الثعبان بيان آخر بعد البيان (إذا ثم آخر)، ثم تدفق التحكم من خلال البيان محاولة بأكمله.

أمثلة

هنا مثال بسيط، فإنه يفتح ملف، ومحتويات محتوى الملف هو مكتوب، وليس حدوث استثناء:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

try:
    fh = open("testfile", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
    print "Error: 没有找到文件或读取文件失败"
else:
    print "内容写入文件成功"
    fh.close()

إخراج البرنامج أعلاه:

$ python test.py 
内容写入文件成功
$ cat testfile       # 查看写入的内容
这是一个测试文件,用于测试异常!!

أمثلة

هنا مثال بسيط، فإنه يفتح ملف، ومحتويات كتابي في محتويات الملف، ولكن الملف لم يكن لديك إذن الكتابة، حدث استثناء:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

try:
    fh = open("testfile", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
    print "Error: 没有找到文件或读取文件失败"
else:
    print "内容写入文件成功"
    fh.close()

قبل تنفيذ التعليمات البرمجية من أجل تسهيل الاختبار، يمكننا أولا إزالة الوصول للكتابة إلى ملف testfile الأمر كما يلي:

chmod -w testfile

ثم تنفيذ التعليمات البرمجية أعلاه:

$ python test.py 
Error: 没有找到文件或读取文件失败

باستثناء من دون استخدام أي نوع من الاستثناء مع

يمكنك استخدام دون أي نوع الاستثناء باستثناء الأمثلة التالية:

try:
    正常的操作
   ......................
except:
    发生异常,执行这块代码
   ......................
else:
    如果没有异常执行这块代码

فوق بطريقة محاولة، باستثناء بيان للقبض على جميع الاستثناءات التي تحدث. ولكن هذه ليست طريقة جيدة، من خلال هذا البرنامج لا يمكننا تحديد المعلومات استثناء محددة. لأنه يلتقط كل الاستثناءات.


وباستخدام أنواع متعددة من الاستثناءات إلا

يمكنك أيضا استخدام نفس باستثناء بيانات لمعالجة الاستثناءات متعددة، على النحو التالي:

try:
    正常的操作
   ......................
except(Exception1[, Exception2[,...ExceptionN]]]):
   发生以上多个异常中的一个,执行这块代码
   ......................
else:
    如果没有异常执行这块代码

محاولة-أخيرا بيان

محاولة-أخيرا بيان ما إذا كان استثناء يحدث من شأنها أن تؤدي رمز النهائية.

try:
<语句>
finally:
<语句>    #退出try时总会执行
raise

أمثلة

#!/usr/bin/python
# -*- coding: UTF-8 -*-

try:
    fh = open("testfile", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
finally:
    print "Error: 没有找到文件或读取文件失败"

إذا قمت بفتح ملف ليس لديه الإذن الكتابة، خرج هو على النحو التالي:

$ python test.py 
Error: 没有找到文件或读取文件失败

ويمكن أيضا أن المثال نفسه أن يكتب على النحو التالي:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

try:
    fh = open("testfile", "w")
    try:
        fh.write("这是一个测试文件,用于测试异常!!")
    finally:
        print "关闭文件"
        fh.close()
except IOError:
    print "Error: 没有找到文件或读取文件失败"

عندما طرح استثناء في كتلة المحاولة، ومنع أخيرا من التعليمات البرمجية على الفور.

منع في نهاية المطاف جميع البيانات بعد تنفيذ، يتم تشغيل استثناء مرة أخرى والتنفيذ باستثناء كود كتلة.

محتويات المعلمة مختلفة عن الاستثناء.


المعلمات غير طبيعية

استثناء يمكن أن المعلمات، كما معلمات الإخراج المعلومات شذوذ.

يمكنك التقاط استثناء من خلال بيانات المعلمة باستثناء ما يلي:

try:
    正常的操作
   ......................
except ExceptionType, Argument:
    你可以在这输出 Argument 的值...

متغيرات القيم الشاذة عادة ما تدرج في بيان استثناء استقبالا. المتغيرات في شكل من المجموعات قد تظهر قيمة واحدة أو أكثر.

الصفوف (tuple) عادة ما تحتوي على سلسلة الخطأ، رقم خاطئ، موقع خاطئ.

أمثلة

فيما يلي أمثلة من استثناء واحد التالية:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 定义函数
def temp_convert(var):
    try:
        return int(var)
    except ValueError, Argument:
        print "参数没有包含数字\n", Argument

# 调用函数
temp_convert("xyz");

نتائج الإجراءات المذكورة أعلاه هي كما يلي:

$ python test.py 
参数没有包含数字
invalid literal for int() with base 10: 'xyz'

الزناد غير طبيعي

يمكننا استخدام العبارة لرفع أنفسهم تحريك استثناء

رفع بناء الجملة كما يلي:

raise [Exception [, args [, traceback]]]

بيان الاستثناء هو نوع من استثناء (على سبيل المثال، NameError) المعلمة قيمة المعلمة غير طبيعية. هذه المعلمة اختيارية، إذا لم تقدم، فإن الحجة استثناء هي "لا شيء".

الوسيطة الأخيرة اختيارية (نادرا ما تستخدم في الممارسة)، إذا كان هناك كائن استثناء أثر.

أمثلة

استثناء يمكن أن يكون سلسلة، فئة أو كائن. استثناء بايثون التي تقدمها النواة، معظمها حالات الطبقة، وهي معلمة مثيل فئة.

تعريف بسيط جدا من استثناء، على النحو التالي:

def functionName( level ):
    if level < 1:
        raise Exception("Invalid level!", level)
        # 触发异常后,后面的代码就不会再执行

ملاحظة: لتكون قادرة على التقاط الاستثناء "إلا" يجب أن يكون البيان مفيدا لرمي نفسه كائن الفئة استثناء أو سلسلة.

على سبيل المثال، نحن التقاط أكثر من استثناء، "إلا" البيان كما يلي:

try:
    正常逻辑
except "Invalid level!":
    触发自定义异常    
else:
    其余代码

أمثلة

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 定义函数
def mye( level ):
    if level < 1:
        raise Exception("Invalid level!", level)
        # 触发异常后,后面的代码就不会再执行

try:
    mye(0)                // 触发异常
except "Invalid level!":
    print 1
else:
    print 2

تنفيذ التعليمات البرمجية أعلاه، والناتج هو:

$ python test.py 
Traceback (most recent call last):
  File "test.py", line 11, in <module>
    mye(0)
  File "test.py", line 7, in mye
    raise Exception("Invalid level!", level)
Exception: ('Invalid level!', 0)

استثناءات المعرفة

من خلال خلق طبقة جديدة استثناء، البرنامج قد اسم الاستثناءات الخاصة بهم. يجب أن تكون موروثة استثناءات نموذجية من الطبقة استثناء، سواء بشكل مباشر أو غير مباشر.

يلي يرتبط المثال المثال RuntimeError إنشاء فئة، الفئة الأساسية هي RuntimeError، لإخراج معلومات إضافية عندما يتم تشغيل استثناء.

في كتلة المحاولة، المستخدم ينفذ بيان كتلة إلا استثناء العرف، ويستخدم البريد متغير لخلق حالات من الدرجة Networkerror.

class Networkerror(RuntimeError):
    def __init__(self, arg):
        self.args = arg

بعد تعريف الفئات المذكورة أعلاه، يمكنك تحريك استثناء، على النحو التالي:

try:
    raise Networkerror("Bad hostname")
except Networkerror,e:
    print e.args