Soit, le code suivant :
self.records = [r for r in self.records if r[self.key]<other]
Avec Python2.x, si self.key et other sont de type différents, la
comparaison retourne True ou False en fonction des types.
Avec Python3.x, ce n'est pas permis. Une exception est retournée.
Mon code modifié pour Python 3.x est :
rec = []
for r in self.records :
try :
if r[self.key]<other :
rec.append(r)
except TypeError :
pass
self.records = rec
>> L'utilisation de "isinstance()" est possible mais rendrait le code >> inutilement compliqué.
> Pourquoi? C'est fait pour cela. Il me semble que la première > chose à faire avant de comparer est de trier ce qui est comparable. > Peu importe le type de donnée.
>>>> z = ['a', 1.0, 3, {}, set(), 99, None] >>>> a = [e for e in z if isinstance(e, (int, float))] >>>> a > [1.0, 3, 99] >>>> other = 5 >>>> [e for e in a if e< other] > [1.0, 3]
> jmf
Comme je l'ai dit à Alain : Ce que je veux, c'est que le code traduit en Python3 fonctionne exactement comme le code d'origine écrit en Python2. Pour question de compatibilité.
Nicolas
Le code proposé n'est qu'illustratif et fonctionne aussi bien en Python 2 qu'en Python 3.
Avis tout personnel. Quand on en arrive à devoir trier une liste d'objects non comparables, il y a quelque part quelque chose qui ne joue pas.
Le "grand nettoyage" de Python 3 ne fait que le confirmer.
2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]
Traceback (most recent call last): File "<eta last command>", line 1, in <module> TypeError: unorderable types: str() < int()
None < 5
Traceback (most recent call last): File "<eta last command>", line 1, in <module> TypeError: unorderable types: NoneType() < int()
Bon suite. jmf
On 17 oct, 09:01, Nicolas <nicol...@aaton.com> wrote:
Le 14/10/2011 11:29, jmfauth a écrit :
> On 14 oct, 09:00, Nicolas<nicol...@aaton.com> wrote:
>> L'utilisation de "isinstance()" est possible mais rendrait le code
>> inutilement compliqué.
> Pourquoi? C'est fait pour cela. Il me semble que la première
> chose à faire avant de comparer est de trier ce qui est comparable.
> Peu importe le type de donnée.
>>>> z = ['a', 1.0, 3, {}, set(), 99, None]
>>>> a = [e for e in z if isinstance(e, (int, float))]
>>>> a
> [1.0, 3, 99]
>>>> other = 5
>>>> [e for e in a if e< other]
> [1.0, 3]
> jmf
Comme je l'ai dit à Alain :
Ce que je veux, c'est que le code traduit en Python3 fonctionne
exactement comme le code d'origine écrit en Python2. Pour question de
compatibilité.
Nicolas
Le code proposé n'est qu'illustratif et fonctionne aussi bien en
Python 2 qu'en Python 3.
Avis tout personnel. Quand on en arrive à devoir trier
une liste d'objects non comparables, il y a quelque part
quelque chose qui ne joue pas.
Le "grand nettoyage" de Python 3 ne fait que le confirmer.
2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]
>> L'utilisation de "isinstance()" est possible mais rendrait le code >> inutilement compliqué.
> Pourquoi? C'est fait pour cela. Il me semble que la première > chose à faire avant de comparer est de trier ce qui est comparable. > Peu importe le type de donnée.
>>>> z = ['a', 1.0, 3, {}, set(), 99, None] >>>> a = [e for e in z if isinstance(e, (int, float))] >>>> a > [1.0, 3, 99] >>>> other = 5 >>>> [e for e in a if e< other] > [1.0, 3]
> jmf
Comme je l'ai dit à Alain : Ce que je veux, c'est que le code traduit en Python3 fonctionne exactement comme le code d'origine écrit en Python2. Pour question de compatibilité.
Nicolas
Le code proposé n'est qu'illustratif et fonctionne aussi bien en Python 2 qu'en Python 3.
Avis tout personnel. Quand on en arrive à devoir trier une liste d'objects non comparables, il y a quelque part quelque chose qui ne joue pas.
Le "grand nettoyage" de Python 3 ne fait que le confirmer.
2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]
Traceback (most recent call last): File "<eta last command>", line 1, in <module> TypeError: unorderable types: str() < int()
None < 5
Traceback (most recent call last): File "<eta last command>", line 1, in <module> TypeError: unorderable types: NoneType() < int()
Bon suite. jmf
jmfauth
On 17 oct, 10:57, jmfauth wrote:
On 17 oct, 09:01, Nicolas wrote:
> Le 14/10/2011 11:29, jmfauth a écrit :
> > On 14 oct, 09:00, Nicolas wrote:
> >> L'utilisation de "isinstance()" est possible mais rendrait le code > >> inutilement compliqué.
> > Pourquoi? C'est fait pour cela. Il me semble que la première > > chose à faire avant de comparer est de trier ce qui est comparable. > > Peu importe le type de donnée.
> >>>> z = ['a', 1.0, 3, {}, set(), 99, None] > >>>> a = [e for e in z if isinstance(e, (int, float))] > >>>> a > > [1.0, 3, 99] > >>>> other = 5 > >>>> [e for e in a if e< other] > > [1.0, 3]
> > jmf
> Comme je l'ai dit à Alain : > Ce que je veux, c'est que le code traduit en Python3 fonctionne > exactement comme le code d'origine écrit en Python2. Pour question de > compatibilité.
> Nicolas
Le code proposé n'est qu'illustratif et fonctionne aussi bien en Python 2 qu'en Python 3.
Avis tout personnel. Quand on en arrive à devoir trier une liste d'objects non comparables, il y a quelque part quelque chose qui ne joue pas.
Le "grand nettoyage" de Python 3 ne fait que le confirmer.
2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]>>> 'a' < 5 False >>> None < 5
Traceback (most recent call last): File "<eta last command>", line 1, in <module> TypeError: unorderable types: str() < int()>>> None < 5
Traceback (most recent call last): File "<eta last command>", line 1, in <module> TypeError: unorderable types: NoneType() < int()
Bon suite. jmf
Errata. Lire Bonne suite.
On 17 oct, 10:57, jmfauth <wxjmfa...@gmail.com> wrote:
On 17 oct, 09:01, Nicolas <nicol...@aaton.com> wrote:
> Le 14/10/2011 11:29, jmfauth a écrit :
> > On 14 oct, 09:00, Nicolas<nicol...@aaton.com> wrote:
> >> L'utilisation de "isinstance()" est possible mais rendrait le code
> >> inutilement compliqué.
> > Pourquoi? C'est fait pour cela. Il me semble que la première
> > chose à faire avant de comparer est de trier ce qui est comparable.
> > Peu importe le type de donnée.
> >>>> z = ['a', 1.0, 3, {}, set(), 99, None]
> >>>> a = [e for e in z if isinstance(e, (int, float))]
> >>>> a
> > [1.0, 3, 99]
> >>>> other = 5
> >>>> [e for e in a if e< other]
> > [1.0, 3]
> > jmf
> Comme je l'ai dit à Alain :
> Ce que je veux, c'est que le code traduit en Python3 fonctionne
> exactement comme le code d'origine écrit en Python2. Pour question de
> compatibilité.
> Nicolas
Le code proposé n'est qu'illustratif et fonctionne aussi bien en
Python 2 qu'en Python 3.
Avis tout personnel. Quand on en arrive à devoir trier
une liste d'objects non comparables, il y a quelque part
quelque chose qui ne joue pas.
Le "grand nettoyage" de Python 3 ne fait que le confirmer.
2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]>>> 'a' < 5
False
>>> None < 5
> >> L'utilisation de "isinstance()" est possible mais rendrait le code > >> inutilement compliqué.
> > Pourquoi? C'est fait pour cela. Il me semble que la première > > chose à faire avant de comparer est de trier ce qui est comparable. > > Peu importe le type de donnée.
> >>>> z = ['a', 1.0, 3, {}, set(), 99, None] > >>>> a = [e for e in z if isinstance(e, (int, float))] > >>>> a > > [1.0, 3, 99] > >>>> other = 5 > >>>> [e for e in a if e< other] > > [1.0, 3]
> > jmf
> Comme je l'ai dit à Alain : > Ce que je veux, c'est que le code traduit en Python3 fonctionne > exactement comme le code d'origine écrit en Python2. Pour question de > compatibilité.
> Nicolas
Le code proposé n'est qu'illustratif et fonctionne aussi bien en Python 2 qu'en Python 3.
Avis tout personnel. Quand on en arrive à devoir trier une liste d'objects non comparables, il y a quelque part quelque chose qui ne joue pas.
Le "grand nettoyage" de Python 3 ne fait que le confirmer.
2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]>>> 'a' < 5 False >>> None < 5
Traceback (most recent call last): File "<eta last command>", line 1, in <module> TypeError: unorderable types: str() < int()>>> None < 5
Traceback (most recent call last): File "<eta last command>", line 1, in <module> TypeError: unorderable types: NoneType() < int()
Bon suite. jmf
Errata. Lire Bonne suite.
Nicolas
Le 17/10/2011 10:57, jmfauth a écrit :
On 17 oct, 09:01, Nicolas wrote:
Le 14/10/2011 11:29, jmfauth a écrit :
On 14 oct, 09:00, Nicolas wrote:
L'utilisation de "isinstance()" est possible mais rendrait le code inutilement compliqué.
Pourquoi? C'est fait pour cela. Il me semble que la première chose à faire avant de comparer est de trier ce qui est comparable. Peu importe le type de donnée.
z = ['a', 1.0, 3, {}, set(), 99, None] a = [e for e in z if isinstance(e, (int, float))] a
[1.0, 3, 99]
other = 5 [e for e in a if e< other]
[1.0, 3]
jmf
Comme je l'ai dit à Alain : Ce que je veux, c'est que le code traduit en Python3 fonctionne exactement comme le code d'origine écrit en Python2. Pour question de compatibilité.
Nicolas
Le code proposé n'est qu'illustratif et fonctionne aussi bien en Python 2 qu'en Python 3.
Avis tout personnel. Quand on en arrive à devoir trier une liste d'objects non comparables, il y a quelque part quelque chose qui ne joue pas.
Le "grand nettoyage" de Python 3 ne fait que le confirmer.
Je suis tout à fait d'accord. Mais, ici, il s'agit de porter une bibliothèque écrite en Python2 vers du Python3 tout en gardant un fonctionnement strictement identique. Ceci pour que les applications déjà existantes (et également portées vers Python3 bien sûr) ne voient pas leur fonctionnement changer. S'il en était autrement, ce n'est pas une traduction des applications qu'il faudrait faire mais une réécriture.
Nicolas
2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]
Traceback (most recent call last): File "<eta last command>", line 1, in<module> TypeError: unorderable types: str()< int()
None< 5
Traceback (most recent call last): File "<eta last command>", line 1, in<module> TypeError: unorderable types: NoneType()< int()
Bon suite. jmf
Le 17/10/2011 10:57, jmfauth a écrit :
On 17 oct, 09:01, Nicolas<nicol...@aaton.com> wrote:
Le 14/10/2011 11:29, jmfauth a écrit :
On 14 oct, 09:00, Nicolas<nicol...@aaton.com> wrote:
L'utilisation de "isinstance()" est possible mais rendrait le code
inutilement compliqué.
Pourquoi? C'est fait pour cela. Il me semble que la première
chose à faire avant de comparer est de trier ce qui est comparable.
Peu importe le type de donnée.
z = ['a', 1.0, 3, {}, set(), 99, None]
a = [e for e in z if isinstance(e, (int, float))]
a
[1.0, 3, 99]
other = 5
[e for e in a if e< other]
[1.0, 3]
jmf
Comme je l'ai dit à Alain :
Ce que je veux, c'est que le code traduit en Python3 fonctionne
exactement comme le code d'origine écrit en Python2. Pour question de
compatibilité.
Nicolas
Le code proposé n'est qu'illustratif et fonctionne aussi bien en
Python 2 qu'en Python 3.
Avis tout personnel. Quand on en arrive à devoir trier
une liste d'objects non comparables, il y a quelque part
quelque chose qui ne joue pas.
Le "grand nettoyage" de Python 3 ne fait que le confirmer.
Je suis tout à fait d'accord.
Mais, ici, il s'agit de porter une bibliothèque écrite en Python2 vers
du Python3 tout en gardant un fonctionnement strictement identique. Ceci
pour que les applications déjà existantes (et également portées vers
Python3 bien sûr) ne voient pas leur fonctionnement changer.
S'il en était autrement, ce n'est pas une traduction des applications
qu'il faudrait faire mais une réécriture.
Nicolas
2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]
L'utilisation de "isinstance()" est possible mais rendrait le code inutilement compliqué.
Pourquoi? C'est fait pour cela. Il me semble que la première chose à faire avant de comparer est de trier ce qui est comparable. Peu importe le type de donnée.
z = ['a', 1.0, 3, {}, set(), 99, None] a = [e for e in z if isinstance(e, (int, float))] a
[1.0, 3, 99]
other = 5 [e for e in a if e< other]
[1.0, 3]
jmf
Comme je l'ai dit à Alain : Ce que je veux, c'est que le code traduit en Python3 fonctionne exactement comme le code d'origine écrit en Python2. Pour question de compatibilité.
Nicolas
Le code proposé n'est qu'illustratif et fonctionne aussi bien en Python 2 qu'en Python 3.
Avis tout personnel. Quand on en arrive à devoir trier une liste d'objects non comparables, il y a quelque part quelque chose qui ne joue pas.
Le "grand nettoyage" de Python 3 ne fait que le confirmer.
Je suis tout à fait d'accord. Mais, ici, il s'agit de porter une bibliothèque écrite en Python2 vers du Python3 tout en gardant un fonctionnement strictement identique. Ceci pour que les applications déjà existantes (et également portées vers Python3 bien sûr) ne voient pas leur fonctionnement changer. S'il en était autrement, ce n'est pas une traduction des applications qu'il faudrait faire mais une réécriture.
Nicolas
2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]