Chciałbym wiedzieć, czy istnieje sposób na pisanie poniższego kodu modułu bez konieczności dodawania innego poziomu wcięcia całego kodu modułu.

# module code
if not condition:
    # rest of the module code (big)

Szukam czegoś takiego:

# module code
if condition:
    # here I need something like a `return`
# rest of the module code (big)

Uwaga, nie chcę rzucać wyjątku, import powinien zwykle przejść.

7
sorin 13 październik 2011, 17:07

3 odpowiedzi

Najlepsza odpowiedź

Nie wiem o żadnym rozwiązaniu, ale myślę, że możesz umieścić cały swój kod w module wewnętrznym i zaimportować, że jeśli warunek nie zostanie spełniony.

5
UncleZeiv 13 październik 2011, 14:33

Wiem, że nie ma miejsca. Jedyną rzeczą, jaką mogłem sobie wyobrazić, że działałoby, byłoby return, ale to musi być w funkcji.

1
David Heffernan 13 październik 2011, 13:21

Super trudno powiedzieć, nie wiedząc, jaki jest twój cel wyższego poziomu. (Na przykład, jaki jest warunek? Dlaczego to ma znaczenie? Jak zostanie wywołany moduł. (Jako skrypt z linii poleceń? Przez importowany przez innego modułu?) I pomogłoby wiele wiedzieć (a), dlaczego próbujesz uniknąć wcięcia (II wojny światowej, a my nie musimy zawierać spacji więcej; lub, aby go bardziej uprzejme, Python jest językiem wykorzystującym wcięcie jako funkcji składniowej, więc mówiąc: "Nie mogę używać tej funkcji składniowej" uderza w wiele osób jako dziwnych ograniczeń. To jak rezygnowanie, jeśli - wtedy Testy: Można teoretycznie być w stanie pracować wokół tego ograniczeń, prawdopodobnie czasami, ale dlaczego wchodzisz do pierścienia bokserskiego z rękami związanymi za plecach?) i (b) dlaczego nie możesz rzucić wyjątku (nie , Naprawdę: Czy jesteś całkowicie pewien, że absolutnie nie możesz rzucić żadnych wyjątków?).

Jak to jest, wszystko, co naprawdę zrobiłeś, to zapytać "jak mogę zrobić X, dano warunki A, B i C?" Pytanie, bez wskazania, dlaczego chcesz zrobić x lub dlaczego istnieją warunki A, B i C istnieją, lub nawet, czy jesteś w 100% pewien, że istnieją i nie można ich pracować.

Jeśli to, co naprawdę mówisz, to "Nie chcę uderzyć {Tab} 40 razy podczas pisania funkcji" wtedy prawdziwy problem polega na tym, że potrzebujesz lepszego edytora tekstu. Jeśli tak naprawdę mówisz, że "zdarza się znaleźć wcięcie, aby być estetycznym nieprzyjemnym", powinieneś pomyśleć o (a), jaka jest druga strona argumentu; Oznacza to, dlaczego ludzie Pythona wykorzystuje wcięcia jako składnia, która ma być przydatna; b) czy twoje własne preferencje estetyczne w tym zakresie są ważniejsze niż powody, z którymi wymyśliłeś w (a); oraz c) (W porządku, nie lubi wcięcia jako funkcji składniowej; ale jest to tak proste dla Pythona, że ​​jest filozoficznie sprzeciwiającym się tym w pewnym stopniu, że zasady to jest silną wskazaniem, że może Python nie jest idealnym językiem, aby osiągnąć swoje programowanie Celki Jeśli to, co mówisz, jest to, że masz kod spaghetti, który kończy się całkowicie niemożliwy do refaktoryzacji, to naprawdę pierwszy problem, który ma zostać rozwiązany, zanim spróbujesz przerwać import modułu.

0
patrick-mooney 25 lipiec 2016, 08:54