Wpis z mikrobloga

#naukaprogramowania #programowanie #python

czy taki sposób radzenia sobie z wyjątkami jak w tym fragmencie kodu jest poprawny? sprawdziłem kilka innych sposobów i ten obliczeniowo jest najszybszy, poza tym wydaje się najbardziej klarowny. Ale czy, hmm, zgodny z ogólnie przyjętą 'konwencją'?

nawiasem mówiąc - piszę sobie w ramach nauki bibliotekę pozwalającą na lepszą współpracę biblioteki pandas z bazą postgresql. jak skończę to chętnie się podzielę.
  • 25
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@JajkoJajkoJajkoJajko: Przecież to nie ma prawa zadziałać, jak faktycznie poleci tam wyjątek, to zamiast złapania go, dostaniesz TypeError. To co co chciałeś zrobić, powinieneś zrobić inaczej, najprościej ifami, a co do wyjątków to proponuję przeczytać co to w ogóle jest, bo podchodzisz do tego od złej strony
  • Odpowiedz
@JajkoJajkoJajkoJajko: Masz wybor w ifie tez musisz a\akos oblsuzyc falszywy warunek. Najgorzej puscic go samopas poprzez pass. Mozesz po ifie zrobic jakis log.error, zalezy od krytycznosci komponentu. Mozesz napisac wlasny wyjatek i go obsluzyc, ale z reguly bedziesz i tak tworzyl subklasy do istniejacych juz wyjatkow systemowych (brak pliku, zla wartosc etc), wiec najlatwiej bedzie zobaczyc co sie dzieje jak podasz cos zle i jaki wyjatek wyrzuca python i
  • Odpowiedz
Gdzieś przeczytałem coś w stylu, że w przypadku wyrzucania wyjątków powinno się unikać ifów.


@JajkoJajkoJajkoJajko: W przypadku łapania bardziej, żeby rzucić wyjątek, zazwyczaj musi zajść ku temu jakiś warunek, czyli musisz coś sprawdzić. Np. że nazwa tabeli jest nieprawidłowa. A jeśli zaczyna Ci się robić brzydkie drzewko, to musisz, tak jak napisał ktoś wyżej, wynieść wszelkie sprawdzenia do np. osobnych funkcji.
Łapiąc wyjątek, w exceptcie musisz podać jakiego TYPU wyjątek
  • Odpowiedz
@biwalencik: rozumiem o co chodzi. Na tym poziomie chciałbym, żeby funkcja w razie niepoprawnej akcji wyrzucała wyjątek, dopiero później, przy korzystaniu z funkcji zeby ewentualnie wyłapywac go za pomocą try/except. ale ok, już rozumiem

@Kiro: o właśnie, wcześniej robiłem własnie osobne funkcje do sprawdzania i za ich pomocą wyrzucałem wyjątki, coś w takiego:

def schema
  • Odpowiedz
@biwalencik: ta funkcja schemaerrorraiser służy stricte do wyłapywania wyjątków. więc tą funkcję chcę wrzucić do funkcji, którą zamieściłem w pastebin (gettablepk). a następnie ją wywołać wywoływać:

try:
___gettablepk(table, schema)
except ValueError as e:
___logger.error(e)
  • Odpowiedz
Mysle, ze wywarzasz otwarte drzwi. Do komunikacji z bazami jest tyle standardowych pakietow. Moze MUSISZ napisac to sam, ale jesli nie musisz zajzyj na SQLAlchemy, ponyORM, albo cos podobnego


@biwalencik: Bez przesady, kolega się uczy, jaki jest sens używać ORMów kiedy nie wie się co one w sumie robią? Później masz całe stada programistów którzy klepią modele w django i nie rozumieją skąd w sumie te dane się tam biorą,
  • Odpowiedz
@biwalencik: ale te pakiety są niewygodne jeśli chce się załadować DataFrame do bazy, albo wczytać bezpośrednio z bazy do DataFrame'u (mówie tu o DataFrame z pakietu pandas). nigdzie nie mogłem znaleźć żadnego pakietu który by pozwolił to wygodnie łączyć, a funkcji wbudowanych w pandas jest mało i są mało praktyczne. Jak tylko skończę pisać to pochwalę się co z tego wyszło
  • Odpowiedz