<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>http://brain.fuw.edu.pl/edu/index.php?action=history&amp;feed=atom&amp;title=TI%2FZadanie_z_tracebackami</id>
	<title>TI/Zadanie z tracebackami - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="http://brain.fuw.edu.pl/edu/index.php?action=history&amp;feed=atom&amp;title=TI%2FZadanie_z_tracebackami"/>
	<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=TI/Zadanie_z_tracebackami&amp;action=history"/>
	<updated>2026-04-23T10:15:17Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=TI/Zadanie_z_tracebackami&amp;diff=1834&amp;oldid=prev</id>
		<title>Jarekz: Utworzono nową stronę &quot;=== Zadanie 1 === &quot;Tracebacki&quot; w Pythonie mają następującą postać: &lt;pre&gt; Traceback (most recent call last):   File &quot;&lt;nazwa-pliku&gt;&quot;, line &lt;n&gt;, in &lt;nazwa-funkcji-lub-...&quot;</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=TI/Zadanie_z_tracebackami&amp;diff=1834&amp;oldid=prev"/>
		<updated>2015-05-23T10:54:27Z</updated>

		<summary type="html">&lt;p&gt;Utworzono nową stronę &amp;quot;=== Zadanie 1 === &amp;quot;Tracebacki&amp;quot; w Pythonie mają następującą postać: &amp;lt;pre&amp;gt; Traceback (most recent call last):   File &amp;quot;&amp;lt;nazwa-pliku&amp;gt;&amp;quot;, line &amp;lt;n&amp;gt;, in &amp;lt;nazwa-funkcji-lub-...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=== Zadanie 1 ===&lt;br /&gt;
&amp;quot;Tracebacki&amp;quot; w Pythonie mają następującą postać:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;&amp;lt;nazwa-pliku&amp;gt;&amp;quot;, line &amp;lt;n&amp;gt;, in &amp;lt;nazwa-funkcji-lub-&amp;lt;module&amp;gt;&amp;gt;&lt;br /&gt;
     &amp;lt;linijka-kodu&amp;gt;&lt;br /&gt;
  File &amp;quot;&amp;lt;nazwa-pliku&amp;gt;&amp;quot;, line &amp;lt;n&amp;gt;, in &amp;lt;nazwa-funkcji-lub-&amp;lt;module&amp;gt;&amp;gt;&lt;br /&gt;
     &amp;lt;linijka-kodu&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;klasa-wyjatku&amp;gt;: &amp;lt;opis&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Parę przykładów jest poniżej.)&lt;br /&gt;
&lt;br /&gt;
Prosze napisać funkcję do parsowania tracebacków z napisu:&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;parse(s)&amp;lt;/tt&amp;gt;&lt;br /&gt;
która zwraca trzy rzeczy:&lt;br /&gt;
&lt;br /&gt;
* typ wyjątku (w postaci nazwy klasy)&lt;br /&gt;
* opis wyjątku (w postaci napisu)&lt;br /&gt;
* sekwencję linijek nastepującej postaci&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;(&amp;lt;nazwa-pliku&amp;gt;, &amp;lt;n&amp;gt;, &amp;lt;nazwa-funkcji-lub-&amp;lt;module&amp;gt;&amp;gt;, &amp;lt;linijka-kodu&amp;gt;)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W zwracanej sekwencji&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nazwa-pliku&amp;gt;&amp;lt;/tt&amp;gt; i &amp;lt;tt&amp;gt;&amp;lt;linijka-kodu&amp;gt;&amp;lt;/tt&amp;gt; niech będą napisami. Numer &amp;lt;tt&amp;gt;&amp;lt;n&amp;gt;&amp;lt;/tt&amp;gt; niech będzie&lt;br /&gt;
liczbą. &amp;lt;tt&amp;gt;&amp;lt;nazwa-funkcji-lub-&amp;lt;module&amp;gt;&amp;gt;&amp;lt;/tt&amp;gt; jest najbardziej kłopotliwa, bo może&lt;br /&gt;
to być albo nazwa funkcji, albo stały napis &amp;lt;tt&amp;gt;&amp;amp;lt;module&amp;amp;gt;&amp;lt;/tt&amp;gt;, oznaczający&lt;br /&gt;
że fragment kodu był na poziomie modułu, a nie w żadnej funkcji.&lt;br /&gt;
W przypadku gdy &amp;lt;tt&amp;gt;&amp;lt;nazwa-funkcji-lub-&amp;lt;module&amp;gt;&amp;gt;&amp;lt;/tt&amp;gt; jest funkcją, zwracana sekwencja powinna zawierać nazwę funkcji jako napis, natomiast wpp. &amp;lt;tt&amp;gt;None&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Zadanie 2 ===&lt;br /&gt;
Wykorzystując funkcję &amp;lt;tt&amp;gt;parse&amp;lt;/tt&amp;gt; z poprzedniego zadania, prosżę napisać funkcję&lt;br /&gt;
  parse_file(file)&lt;br /&gt;
która otworzy plik &amp;lt;tt&amp;gt;file&amp;lt;/tt&amp;gt; i wczyta z niego &amp;quot;traceback&amp;quot;. Jeśli &amp;lt;tt&amp;gt;file&amp;lt;/tt&amp;gt; jest napisem,&lt;br /&gt;
to funkcja powinna sama otworzyć plik traktując &amp;lt;tt&amp;gt;file&amp;lt;/tt&amp;gt; jako nazwę pliku.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Traceback&amp;quot; w pliku można znaleźć szukając linijki zaczynającej się od &amp;quot;Traceback (most recent&amp;quot;.&lt;br /&gt;
Z koleji wiemy, że &amp;quot;traceback&amp;quot; nie jest skończony, dopóki mamy linijki zaczynające się od spacji.&lt;br /&gt;
Pierwsza linija nie zaczynająca się od spacji powinna być linijką z typem i opisem wyjątku.&lt;br /&gt;
(Mimo, że nie brzmi to specjalnie niezawodnie, moduł &amp;lt;tt&amp;gt;doctest&amp;lt;/tt&amp;gt; w standardowej bibliotece Pythona działa w dokładnie taki sposób.)&lt;br /&gt;
&lt;br /&gt;
=== Zadanie 3 ===&lt;br /&gt;
Wykorzystując funkcję &amp;lt;tt&amp;gt;parse_file&amp;lt;/tt&amp;gt; z poprzedniego zadania, proszę napisać program&lt;br /&gt;
  parser.py&lt;br /&gt;
który wypisze wyjątki występujące w plikach podanych jako argumenty programu.&lt;br /&gt;
Wyjatki powinny być wypisane w zwięzłej formie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;typ-wyjątku&amp;gt;&lt;br /&gt;
  &amp;lt;nazwa-pliku&amp;gt;:&amp;lt;n&amp;gt;:&amp;lt;nazwa-funkcji&amp;gt;: &amp;lt;linijka-kodu&amp;gt;&lt;br /&gt;
  &amp;lt;nazwa-pliku&amp;gt;:&amp;lt;n&amp;gt;:&amp;lt;nazwa-funkcji&amp;gt;: &amp;lt;linijka-kodu&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;opis-wyjątku&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Przykład ====&lt;br /&gt;
Dla następującego pliku &amp;lt;tt&amp;gt;plik-1&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;examples.py&amp;quot;, line 10, in f&lt;br /&gt;
    def f(): g()&lt;br /&gt;
  File &amp;quot;examples.py&amp;quot;, line 11, in g&lt;br /&gt;
    def g(): h()&lt;br /&gt;
  File &amp;quot;examples.py&amp;quot;, line 12, in h&lt;br /&gt;
    def h(): 1/0&lt;br /&gt;
ZeroDivisionError: integer division or modulo by zero&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
wywołanie&lt;br /&gt;
  parser.py plik-1&lt;br /&gt;
powinno dać&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ZeroDivisionError&lt;br /&gt;
  examples.py:10:f: def f(): g()&lt;br /&gt;
  examples.py:11:g: def g(): h()&lt;br /&gt;
  examples.py:12:h: def h(): 1/0&lt;br /&gt;
integer division or modulo by zero&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tracebacki ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;examples.py&amp;quot;, line 6, in trace&lt;br /&gt;
    func()&lt;br /&gt;
  File &amp;quot;examples.py&amp;quot;, line 10, in f&lt;br /&gt;
    def f(): g()&lt;br /&gt;
  File &amp;quot;examples.py&amp;quot;, line 11, in g&lt;br /&gt;
    def g(): h()&lt;br /&gt;
  File &amp;quot;examples.py&amp;quot;, line 12, in h&lt;br /&gt;
    def h(): 1/0&lt;br /&gt;
ZeroDivisionError: integer division or modulo by zero&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;examples.py&amp;quot;, line 6, in trace&lt;br /&gt;
    func()&lt;br /&gt;
  File &amp;quot;examples.py&amp;quot;, line 17, in f&lt;br /&gt;
    g()&lt;br /&gt;
  File &amp;quot;examples.py&amp;quot;, line 19, in g&lt;br /&gt;
    h()&lt;br /&gt;
  File &amp;quot;examples.py&amp;quot;, line 21, in h&lt;br /&gt;
    1/0&lt;br /&gt;
ZeroDivisionError: integer division or modulo by zero&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;examples.py&amp;quot;, line 6, in trace&lt;br /&gt;
    func()&lt;br /&gt;
  File &amp;quot;examples.py&amp;quot;, line 26, in m&lt;br /&gt;
    import module&lt;br /&gt;
  File &amp;quot;/home/zbyszek/python/neuroinformatyka/tracebacks/module.py&amp;quot;, line 1, in &amp;lt;module&amp;gt;&lt;br /&gt;
    {}['x']&lt;br /&gt;
KeyError: 'x'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;examples.py&amp;quot;, line 30, in &amp;lt;module&amp;gt;&lt;br /&gt;
    1/0&lt;br /&gt;
ZeroDivisionError: integer division or modulo by zero&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jarekz</name></author>
		
	</entry>
</feed>