Comment recruter un développeur Python
samedi 27 octobre 2012 à 16:28Bonjour M. Gentil. Vous venez pour la position de stagiaire ingénieur senior en periode d’essai sur 3 ans ?
C’est bien, c’est bien.
Nous avons des perspectives de progression fascinantes dans notre SS3I au carré.
J’ai juste quelques tests à vous faire passer. Trois fois rien. Simple formalité administrative. Vous comprenez, on ne peut pas embaucher pas n’importe quel Bac + 5 et le payer SMIC, comme ça sur un coup de tête.
Ce n’est pas contre vous, non.
Pourriez-vous me dire ce qu’affiche ce snippet ? (mouahahahahaha, rire diabolique intérieur)
def test(): try: return 1 + "1" except TypeError: return "exception" finally: return "finally" print test()
Et celui-là, il affiche la stack trace ou pas ?
def test(): try: print 1 + "1" except TypeError: raise ValueError('Test') finally: return "finally" print test()
Bon ok, mais si on a un générateur alors ?
def test(): try: yield 1 + "1" except TypeError: yield 'typerror' return finally: yield "finally" return yield "Out" for value in test(): print value
Quelle exception sera catchée, dans le bout de code suivant ? (tapoter son style de manière énervante sur la table)
def test(): try: assert 1 + "1" except AssertionError: print "assertionerror" except Exception: print "exception" except TypeError: print "typerror" test()
Je vois. Donc finally est exécuté dans tous les cas ?
def test(): def foo(): foo() try: foo() except RuntimeError: print 'runtimeerror' finally: print 'finally' test()
Vous êtes sûr ? VRAIMENT dans tous les cas ? (regard appuyé bien stressant, travaillé durant un poste de manager chez Quick)
def test(): try: PRINTEUH ! except SyntaxError: print 'syntaxerror' finally: print 'finally' test()
VRAIMENT, VRAIMENT, dans tous les cas ? Mais alors, VRAIMENT ? (prendre la voix d’Alain Chabat, parce qu’arrivé à ce stade là c’est juste plus rigolo)
def test(): def foo(bar): print bar return foo, bar bar = 'bar' try: while True: foo, bar = foo(bar) except RuntimeError: print 'runtimeerror' finally: print 'finally' test()
Ne vous inquiétez pas, nous ne vous JUgeons paaaaaaas. Détendez-vous. Allez. Une petite dernière. Je vous aide. sys.exit(1)
retourne le code 1.
import sys def test(l=[]): print l try: return 1 + "1" except TypeError: return l or l.append(sys.exit(1)) finally: print "Je sais plus là, sérieux" if len(l) < 1: test() test() test()
Bon, je sens que vous êtes fatigué. On va arrêter là peut être. Vous êtes le genre à vous en tenir là, hein ? Non. Très bien, très bien. Voici un code sur lequel on planche en interne depuis une semaine pour comprendre combien de fois il affiche finally, mais on s’est dit que vous pourriez le résoudre gratuitement pour nous:
import sys import time import multiprocessing from Queue import Empty in_queue = multiprocessing.Queue() out_queue = multiprocessing.Queue() def worker(): while True: try: res = in_queue.get(timeout=0.1) if res == 'stop': sys.exit(1) print res except (Empty, multiprocessing.TimeoutError): pass finally: print 'finally' process = multiprocessing.Process(target=worker) process.start() in_queue.put('test') in_queue.put('stop') print 'afterstop' time.sleep(1) print 'done'
Merci, ce sera tout.
Bon WE, monsieur Gentil.
Nous gardons votre CV. On vous recontactera.