Ես մշակել եմ Python-ի մի քանի ծրագրեր մյուսների համար, որոնք օգտագործում են Tkinter-ը՝ օգտատերից մուտքագրում ստանալու համար: Պարզ և օգտագործողի համար հարմար պահելու համար հրամանի տողը կամ python կոնսոլը երբեք չեն բացվում (այսինքն՝ օգտագործվում են .pyw ֆայլեր), այնպես որ ես օգտագործում եմ գրանցման գրադարանը՝ սխալի տեքստը ֆայլում գրելու համար, երբ բացառություն է տեղի ունենում. Այնուամենայնիվ, ես դժվարանում եմ ստանալ այն, որպեսզի իրականում բռնել բացառությունները: Օրինակ:
Մենք գրում ենք ֆունկցիա, որը կառաջացնի սխալ.
def cause_an_error():
a = 3/0
Այժմ մենք փորձում ենք նորմալ գրանցել սխալը.
import logging
logging.basicConfig(filename='errors.log', level=logging.ERROR)
try:
cause_an_error()
except:
logging.exception('simple-exception')
Ինչպես և սպասվում էր, ծրագիրը սխալվում է, և գրանցումը գրում է սխալը errors.log-ում: Վահանակում ոչինչ չի հայտնվում: Այնուամենայնիվ, կա այլ արդյունք, երբ մենք իրականացնում ենք Tkinter ինտերֆեյս, ինչպես այսպես.
import logging
import Tkinter
logging.basicConfig(filename='errors.log', level=logging.ERROR)
try:
root = Tkinter.Tk()
Tkinter.Button(root, text='Test', command=cause_an_error).pack()
root.mainloop()
except:
logging.exception('simple-exception')
Այս դեպքում Tkinter պատուհանում կոճակը սեղմելը սխալ է առաջացնում: Այնուամենայնիվ, այս անգամ ֆայլում ոչինչ գրված չէ, և վահանակում հայտնվում է հետևյալ սխալը.
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1536, in __call__
return self.func(*args)
File "C:/Users/samk/Documents/GitHub/sandbox/sandbox2.pyw", line 8, in cause_an_error
a = 3/0
ZeroDivisionError: integer division or modulo by zero
Այս սխալը բռնելու և գրանցելու այլ եղանակ կա՞:
traceback
փաստարկին: 20.07.2016