Navigation rapide : Lundi / Mardi / Mercredi / Jeudi / Vendredi Mémos : Perl / Python / Ruby

FAQ

Work in progress … Work in progress … Work in progress … Work in progress …

Indentation

Voici un code python :

 a=1
 print a

à l'exécution, vous obtenez l'erreur suivante :

  File "test.py", line 1
    a=1
    ^
IndentationError: unexpected indent

en effet, il y a un espace avant a=1. En python, l'identation fait partie de la syntaxe. Si une commande est indentée, c'est qu'elle doit faire partie d'un bloc d'exécution (après un if, un while ou un for). Ici, python ne trouve pas le bloc auquel devrait appartenir l'instruction a=1 et renvoie une erreur.

Attention aux noms de fichiers

Évitez d'appeler vos codes socket.py, ldap.py, etc. Sinon vous allez avoir des surprises avec la commande :

import socket
import ldap

Si cela vous arrive, il faut changer de nom votre code et effacer le fichier socket.pyc qui est apparu.

Attention : objets

Que fait ce code ?

dico = { 'test':'toto' }
liste = [dico]
dico['test'] = 'titi'
print liste

Contrairement à l'intuition, le résultat est :

[{'test': 'titi'}]

et pas :

[{'test': 'toto'}]

C'est parce que c'est l'objet dico qui est stocké dans la liste et pas sa valeur !

Pour retrouver un comportement plus proche de l'intuition, il faut utiliser la méthode copy :

dico = { 'test':'toto' }
liste = [dico.copy()]
dico['test'] = 'titi'
print liste

Attention : __init__

Dans les exemples, faites bien attention : les constructeurs d'objets s'appellent __init__ avec deux underscores avant et après.

Idem pour le fichier d'initialisation de module : __init__.py

Accéder aux résultats d'une recherche SQLite par le nom des tables

Comparez le résultat du code suivant en commentant et décommentant la ligne magique !

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""Se connecter à une base sqlite3
lire la base"""
 
import sqlite3
db=sqlite3.connect('labintel.sqlite3')
 
# Commande magique !!!
db.row_factory=sqlite3.Row
 
c=db.cursor()
c.execute("SELECT * FROM pers")
for line in c:
    # line se présente comme un tuple
    print line
    # mais en fait, il a des clés
    print line.keys()
    # et on peut accéder à la valeur de l'id sans connaître le numéro
    print line['id']
db.commit()
db.close()

$Id: memopythonfaq.txt 660 2012-05-23 15:51:59Z aicardi $

memopythonfaq.txt · Last modified: 2012/05/23 17:52 (external edit)
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki