Thursday, June 11, 2015

თავი 3 (3,9 - 3,10)



3.9 გამართვა

პითონის traceback (კუდი) ჩნდება, როცა შეცდომა შეიცავს ბევრ ინფორმაციას, მაგრამ შეიძლება იყოს გადაჭარბებული განსაკუთრებით მაშინ, როცა არის ბევრი frame (ჩარჩო) . ყველაზე გამოსადეგი ნაწილებია:

·         რა ტიპის შეცდომა იყო და
·         სად მოხდა შეცდომა.

სინტაქსური შეცდომა როგორც წესი ადვილი საპოვნელია,  მაგრამ არის ზოგიერთი მომენტი.  უხილავი (Whitespace) შეცდომები შეიძლება იყოს ეშმაკური, იმიტომ რომ გამოტოვებული ადგილები და ტაბები (spaces&tabs) უხილავია და ვაიგნორებთ ხოლმე.

>>> x = 5
>>>   y = 6
    File "<stdin>", line 1
        y = 6
        ˆ
SyntaxError: invalid syntax


ამ მაგალითში პრობლემაა მეორე ხაზი, სადაც დაკბილულია ერთი გამოტოვებული ადგილით. თუმცა შეცდომის მესიჯი მიგვითითებს y - ზე, რაც დამაბნეველია. ზოგადად, შეცდომის მესიჯები მიანიშნებს სადაა პრობლემა აღმოჩენილი, მაგრამ სინამდვილეში შეცდომა შეიძლება დაშვებული ყოფილიყო კოდის წინა ნაწილში. ასევე ხდება შესრულების (runtime) შეცდომებისას.  დავუშვათ ცდილობ დაითვალო სიგნალის და ხმაურის თანაფარდობა დეციბელებში. ფორმულაა SNRdb =10log10(Psignal/Pnoise). პითონში უნდა დაწერო ამის მსგავსი რამე :

import math
signal_power = 9
noise_power = 10
ratio = signal_power / noise_power
decibels = 10 * math.log10(ratio)
print decibels

მაგრამ როცა გაუშვებ, გამოაგდებს შეცდომის მესიჯს1:

Traceback (most recent call last):
   File "snr.py", line 5, in ?
            decibels = 10 * math.log10(ratio)
OverflowError: math range error

შეცდომის წერილი მიუთითებს მეხუთე ხაზზე, თუმცა იქ ყველაფერი სწორადაა. ნამდვილი შეცდომა რომ იპოვნო, სასარგებლო იქნება ამობეჭდო ratio - ს მნიშვნელობა, რომელიც იქნება 0. პრობლემაა მეოთხე ხაზში, იმიტომ რომ ორი მთელი რიცხვის გაყოფით იწარმოება წილადი. ამ პრობლემის გადასაჭრელად საკმარისია ცვლადები გამოვსახოთ წილადში. ზოგადად, შეცდომის წერილები გეუბნება თუ სად აღმოაჩინა შეცდომა, მაგრამ ხშირადაა რომ იქ არ მომხდარა შეცდომა.

1In Python 3.0, you no longer get an error message; the division operator performs floating-point division even with integer operands.



3.10 ლექსიკონი


body: The sequence of statements within a compound statement.
boolean expression: გამოსახულება, რომლის მნიშვნელობაც ან მართალია ან მცდარი.
branch: პირობით კავშირებში ბრძანებების ერთ-ერთი ალტერნატიული თანმიმდევრობა.
chained conditional: პირობითი კავშირი ალტერნატიული ტოტების სერიით.
comparison operator: ერთ-ერთი ოპერატორი, რომელიც ადარებს ოპერანდებს: ==, !=,>, <, >=, და <=.
conditional statement: ბრძანება, რომელიც აკონტროლებს განხორციელების დინებას - დამოკიდებულს რამე პირობაზე.
condition: ლოგიკური გამოსახულება in a conditional statement, რომელიც განსაზღვრავს თუ რომელი ტოტი უნდა განხორციელდეს.
compound statement: ბრძანება, რომელიც შედგება სათაურისგან და სხეულისგან. სათაური მთავრდება ორწერტილით (:). სხეული დაკბილულია სათაურთან შეფარდებით.
guardian pattern: სადაც ვაწყობთ ლოგიკურ გამოსახულებას დამატებითი შედარებებით, რომ გაგვიჩნდეს უპირატესობა მოკლე ჩართვის ქცევაზე.
logical operator: ერთ-ერთი ოპერატორი, რომელიც აერთიანებს ლოგიკურ გამოსახულებებს: and, or, და not.
nested conditional: პირობითი კავშირი, რომელიც ჩანს სხვა პირობითი კავშირის ერთ-ერთ ტოტში.
traceback: ფუნქციების სია, რომელიც ხორციელდება. ამოიბეჭდება, როცა მოხდება გამონაკლისი.
short circuit: როცა პითონი ანგარიშობს გამოსახულების ნახევარს და ჩერდება, იმიტომ რომ პითონმა იცის გამოსახულების საბოლოო მნიშვნელობა და არ სჭირდება გამოსახულების მეორე ნახევრის გამოთვლაც.