کنترل ورودی و اشکال زدایی

Input Control & Error Handling

یادآوری:

اگر به خاطر داشته باشید، ورودی دستور input به صورت رشته یا string بود و وقتی می‌خواستیم از آن استفاده کنیم، باید با سپردن تابع input به توابع int یا float آن را به شکل عددی تبدیل می‌کردیم. امّا وقتی که ورودی رشته بود، یا بهتر بگوییم -عدد نبود- به مشکل برمی‌خوردیم و پیغام خطا دریافت می کردیم.

num = int( input(‘Enter a number:’) )

num = float( input(‘Enter a number:’) )

Enter a number: hello!
Traceback (most recent call last):
File “/usr/lib/python3.8/idlelib/run.py”, line 559, in runcode
exec(code, self.locals)
File “<pyshell#0>”, line 1, in <module>
ValueError: could not convert string to float: ‘hello!’

Check Variable Type

برای جلوگیری از خطا باید در مرحله اول، وروی را کنترل کرد. برای کنترل کردن عددی بودن متغیّر می‌توان از متد isdigit به شکل زیر استفاده کرد:

num = input( “Enter your number:” )

if ( num.isdigit() ):

        print( “User input is Number.” )

else:

        print( “User input is string.” )

توجّه داشته باشید که وجود یک حرف یا کاراکتر غیرعددی در متغیّر دریافتی، آن را از این قاعده خارج می‌کند!

 

همیشه ورودی‌ها از خارج برنامه نیستند! گاهی نتیجه‌ی عملیاتی در برنامه باعث ایجاد یک خروجی می‌شود. در این موارد و برای بررسی نوع خروجی و تصمیم گیری مناسب و کنترل نوع متغیّرهای استفاده شده در برنامه از متد زیر استفاده می‌کنیم:

isinstance( variable, type )

                                                            type: int, float, str, …

برای مثال، برنامه‌ی زیر را تست کنید. به صورت دستی تک تک گزینههای inp را از حالت comment خارج کرده و تک به تک بررسی نمایید:

        inp = “Akbar”

        #inp = 123

        #inp = 12.345

        #inp = []

if isinstance( inp, str ):

        print( “User input is String.” )

elif isinstance( inp, int ):

        print( “User input is Integer” )

elif isinstance( inp, float ):

        print( “User input is Float” )

else:

        print( “User input is not Number or String.” )

Check String Content

num = int( input( ‘Enter a number:’ ) )

num = float( input( ‘Enter a number:’ ) )

در دستورات بالا اگر مقدار وارد شده رشته باشد، با error مواجه می‌شویم. چه باید کرد؟

در این حالت باید با استفاده از try و except آن خطا را مدیریّت کرد.

Error Handling

برای مدیریّت کردن خطا از مدل زیر استفاده می‌کنیم:

try:

#(کدی که ممکن است باعث خطا شود (اینجا تقسیم بر صفر

        print( 9/0 )

        print( “Done calculation” )

except ZeroDivisionError:

        print( “An error occurred” )

-> An error occurred

برای مدیریّت چند خطا به طور هم‌زمان از مدل زیر استفاده می‌کنیم:

num1 = input( “Enter number1:” )

num2 = input( “Enter number2:” )

try:

        divide = int(num1)/int(num2)

except ValueError:

        print( “That’s not a number! Enter only a number …” )

except ZeroDivisionError:

        print( “Your 2nd number must no ber zero!!” )

Error Exceptions

برای مدیریّت کردن خطا بهتر است لیست آن‌ها را ببینیم:

Practice 11

تابعی بنویسید که یک متغیّر را به صورت آرگومان دریافت نموده و نوع آن را مشخّص نماید.

Practice 12

تابعی بنویسید که یک متغیّر را که با input دریافت شده، به صورت آرگومان دریافت نموده و نوع آن را بررسی و مشخّص نماید.

Practice 13

برنامه‌ای بنویسید که دو عدد دریافت کند و خطاهایی که می‌تواند در استفاده از عملگرهای ریاضی در آن رخ دهد را با پیغام مناسب حل کند و پیغام مناسب دهد.