[python] Ovlivnění názvu souboru a čísla řádku ve výjimkách

Petr Viktorin encukou na gmail.com
Úterý Duben 5 20:29:56 CEST 2022


On 05. 04. 22 18:37, Vladimír Macek wrote:
> Zdravím, mám neobvyklou otázku.
> 
> Zvažujeme do jednoho projektu s embedovaným Pythonem vývoj skriptů tak, 
> že se jeden py modul bude vyvíjet po segmentech. Budou nazvané třeba 
> 010.py, 020.py, 030.py, ...
> 
> Pro puristy, budou to malé segmenty specifické domény, nikoli standardní 
> projekt. :-)
> 
> Pro provedení se všechny segmenty modulu spojí do jednoho mod.py. Avšak 
> když v něm nastane chyba, bude v tracebacku mod.py a číslo řádku z něj.
> 
> Vývojář ale bude potřebovat problém najít ve zdrojových segmentech 
> 010.py, 020.py, ...
> 
> Samozřejmě si můžu segmenty zaindexovat, analyzovat text tracebacku a 
> obohatit ho o přepočítané pozice.
> 
> Chci se jen zeptat, jestli někdo z vás neví třeba o způsobu, jak 
> ovlivnit interní počítadlo tak, že by se při spojování do mod.py dal na 
> začátek každého segmentu nějaký override názvu souboru a počítadla řádků.
> 
> Pokud někoho z vás napadnou alternativy, aby se segmenty provedly ve 
> stejném namespace a bez spojování nebo jiné řešení, uvítám tip.


Idealne chces `from segment000 import *` ze vsech segmentu, ale jestli 
je *fakt* potreba stejny namespace pro vic souboru, da se to udelat 
nejak takhle:


-----------8<-----------

exec(compile("""
def main():
     other()
""", '000.fakepy', 'exec'))

exec(compile("""
def other():
     '''docstring on line 3'''
     raise Exception()
""", '001.fakepy', 'exec'))

main()

-----------8<-----------

Traceback (most recent call last):
   File "/tmp/mod.py", line 13, in <module>
     main()
   File "000.fakepy", line 3, in main
   File "001.fakepy", line 4, in other
Exception

-----------8<-----------

(s open+read misto literal retezcu, jestli nechces spojovat)


Další informace o konferenci Python