[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