Eladio  Rau

Eladio Rau

1657369020

Erreur de type d'exception Python: Type non hachable: "slice"

Dans cet article, nous examinerons l'exception Python TypeError: Unhashable Type: 'slice'. Les dictionnaires Python stockent leurs données au format clé-valeur. Depuis Python 3.7, les dictionnaires sont considérés comme des données ordonnées.

Les valeurs d'index ne sont pas affectées aux dictionnaires. Par conséquent, toute opération impliquant des valeurs d'index telles que le découpage en tranches lèvera ladite exception.

Regardons l'exception en détail

Qu'est-ce qu'une erreur de type ?

Toute opération non valide effectuée sur un objet de type de données entraînera des TypeErrors. Par exemple, en utilisant l'opérateur d'addition (+) entre un type chaîne et un entier. Les causes courantes des erreurs de type sont :

Opération non prise en charge entre deux types
Type d'index de liste incorrect
Appel d'un identifiant non appelable
Itération via un identifiant non itératif

Qu'est-ce qu'un type non hachable ?

Les valeurs de hachage sont utilisées à la place des valeurs d'index pour les éléments du dictionnaire. Python compare les clés du dictionnaire avec les valeurs de hachage tout en travaillant avec les éléments du dictionnaire. Nous pouvons hacher des chaînes ou des entiers, mais nous ne pouvons pas les découper. Une tranche n'est rien d'autre qu'un petit sous-ensemble d'un type séquentiel. Il se compose généralement d'une petite partie d'une plus grande séquence de données. Comme les valeurs de tranche ne peuvent pas être hachées, toute tentative de trancher les types hachés lève ladite exception.

Qu'est-ce qui cause cette erreur ?

Toutes les opérations de tranche sur un objet dictionnaire donneront lieu à cette erreur . Un dictionnaire Python est un type hachable et ne prend pas en charge le découpage en tranches comme les autres types de données séquentielles.

Regardons l'exemple suivant :

myCompany = {
            'employee1':{'name':'Adam', 'ID':230001, 'role':'Developer'},
            'employee2':{'name':'Mike', 'ID':230002, 'role':'Developer'},
            'employee3':{'name':'Joe', 'ID':230003, 'role':'Developer'},
            'employee4':{'name':'Chris', 'ID':230004, 'role':'Developer'},
            'employee5':{'name':'Frank', 'ID':230005, 'role':'Developer'}
            }
 
showEmployee = myCompany[:3]
print(showEmployee)

Production

type non hachable : 'tranche'

type non hachable : 'tranche'

La solution

En utilisant la print()déclaration et les clés du dictionnaire, nous pouvons afficher le contenu du dictionnaire.

myCompany = {
            'employee1':{'name':'Adam', 'ID':230001, 'role':'Developer'},
            'employee2':{'name':'Mike', 'ID':230002, 'role':'Developer'},
            'employee3':{'name':'Joe', 'ID':230003, 'role':'Developer'},
            'employee4':{'name':'Chris', 'ID':230004, 'role':'Developer'},
            'employee5':{'name':'Frank', 'ID':230005, 'role':'Developer'}
            }
 
print("Employee 1 " + myCompany["employee1"])
print("Employee 2 " + myCompany["employee2"])
print("Employee 3" + myCompany["employee3"])

TypeError : Type non hachable : "tranche" pour les cadres de données Pandas

Le code ci-dessous montre comment nous pouvons imprimer un sous-ensemble de lignes dans une trame de données pandas.

print(sample_data[25:150, :])
print(sample_data[100:300, :].shape)

Sortie d'erreur

TypeError: unhashable type: 'slice'

La solution

.iloc()La fonction permet l'indexation dans les trames de données pandas. .iloc()La fonction est similaire à l'indexation normale, sauf que ses indices sont basés sur la position.

print(sample_data.iloc[25:1150, :])
print(sample_data.iloc[100:300, :].shape)

TypeError : Type non hachable : 'slice' pour JSON

Référons-nous à l'implémentation suivante. Une requête API est envoyée, les données sont récupérées au format JSON.

import requests
import json
 
req = requests.get('http://sampleAPI.net/sample)
date = json.loads(req.text)
data = req.json()
 
for i in data['myItem'][:3]:
  res = i['attribute']
  print(res)

Production

TypeError: unhashable type: 'slice' error

La solution

myItemsemble être de type Dictionnaire. Par conséquent, toute tentative d'indexation lèvera l'exception. Il vaut mieux utiliser la .items()fonction.

import requests
import json
 
req = requests.get('http://sampleAPI.net/sample)
date = json.loads(req.text)
data = req.json()
 
for i in data(['myItem'].items())[:3]:
  res = i['attribute']
  print(res)

TypeError : Type non hachable : "tranche" pour le module Beautiful Soupe

Le BeautifulSoup module est utilisé pour récupérer des données Web à partir de sources HTML et XML. Examinons l'implémentation suivante qui récupère les données textuelles d'un site Web.

import requests
from bs4 import BeautifulSoup
 
r = requests.get('https://samplewebsite.com/samplePage01')
soup = BeautifulSoup(r.text, 'html.parser')
results = soup.find_all('td', attrs={'valign':'top'})
 
records = []
for result in results:
    name = result.contents[0][0:-1]

Production

TypeError: unhashable type: 'slice' error

La solution

.contentsse composent d'objets balises. Par conséquent, une exception est levée lors de l'accès à un dictionnaire d'attributs de balise.

De plus, utiliser .stringsvous permet de récupérer uniquement NavigableStringdes données.

for result in results:
    name = list(result.strings)[0][0:-1]

TypeError : Type non hachable res = cache.get(item)

Examinons l'implémentation suivante pour un modèle "Forêt aléatoire".

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.metrics import confusion_matrix
import sklearn
import sklearn.datasets
import sklearn.ensemble
import numpy as np
import lime
import lime.lime_tabular
 
class Randomforest:
 
    def __init__(self):
        self.trained_model = None
        self.clf = None
        pass
 
...
...
...
...
 
    rf = Randomforest()
 
...
...
...
...
 
    dataset = pd.read_csv("filename.csv")
 
    train_x, test_x, train_y, test_y = rf.split_dataset(dataset, 0.7, Headers[1:-1], Headers[-1])
 
    trained_model = rf.random_forest_classifier(train_x, train_y)
 
    predictions = trained_model.predict(test_x)
 
    feature_names = Headers[1:-1]
 
    class_names = ['1', '0']
 
    explainer = lime.lime_tabular.LimeTabularExplainer(train_x, feature_names= feature_names, class_names=class_names,
                                                   categorical_features= None, categorical_names=None, discretize_continuous=True,
                                                   kernel_width=3)

Production

TypeError: Unhashable Type

La solution

Nous transmettons les données d'apprentissage ( train_x) dans le modèle en tant que pandastrame de données. Les pandas n'autorisent pas les opérations de découpage sur les trames de données. Par conséquent, passez train_xpour train_x.values.

FAQ sur TypeError : Type non hachable : 'slice'

Comment les erreurs de type sont-elles causées ?

TypeErrors est l'un des nombreux types d'exceptions de Python. Les opérations effectuées sur des types d'objets non pris en charge provoquent l'erreur. Les causes courantes des TypeErrors sont :

Opération non prise en charge entre deux types
Type d'index de liste incorrect
Appel d'un identifiant non appelable
Itération via un identifiant non itératif

Quels sont les objets découpables ?

Les objets découpables en Python incluent :

– Chaînes
– Octets
Tuples
– Listes
Un objet découpable doit prendre en charge l'indexation. Les types de données hachables ne sont pas trancheables.

Conclusion

L'indexation sur les types de dictionnaires et d'autres types de données hachables génère l'erreur.

Les principales raisons TypeErrorssont :

  1. Opération non prise en charge entre deux types
  2. Le type incorrect d'index de liste
  3. Appel d'un identifiant non appelable
  4. Itération à travers un identifiant non itératif

Un moyen plus pratique d'accéder aux éléments du dictionnaire consiste à fournir la valeur de la clé. Une itération peut être fournie pour accéder à plusieurs éléments de dictionnaire à la fois.

Par conséquent, nous avons démontré divers cas où l'erreur peut se produire.

Source :  https://www.pythonpool.com

#python 

What is GEEK

Buddha Community

Erreur de type d'exception Python: Type non hachable: "slice"
Eladio  Rau

Eladio Rau

1657369020

Erreur de type d'exception Python: Type non hachable: "slice"

Dans cet article, nous examinerons l'exception Python TypeError: Unhashable Type: 'slice'. Les dictionnaires Python stockent leurs données au format clé-valeur. Depuis Python 3.7, les dictionnaires sont considérés comme des données ordonnées.

Les valeurs d'index ne sont pas affectées aux dictionnaires. Par conséquent, toute opération impliquant des valeurs d'index telles que le découpage en tranches lèvera ladite exception.

Regardons l'exception en détail

Qu'est-ce qu'une erreur de type ?

Toute opération non valide effectuée sur un objet de type de données entraînera des TypeErrors. Par exemple, en utilisant l'opérateur d'addition (+) entre un type chaîne et un entier. Les causes courantes des erreurs de type sont :

Opération non prise en charge entre deux types
Type d'index de liste incorrect
Appel d'un identifiant non appelable
Itération via un identifiant non itératif

Qu'est-ce qu'un type non hachable ?

Les valeurs de hachage sont utilisées à la place des valeurs d'index pour les éléments du dictionnaire. Python compare les clés du dictionnaire avec les valeurs de hachage tout en travaillant avec les éléments du dictionnaire. Nous pouvons hacher des chaînes ou des entiers, mais nous ne pouvons pas les découper. Une tranche n'est rien d'autre qu'un petit sous-ensemble d'un type séquentiel. Il se compose généralement d'une petite partie d'une plus grande séquence de données. Comme les valeurs de tranche ne peuvent pas être hachées, toute tentative de trancher les types hachés lève ladite exception.

Qu'est-ce qui cause cette erreur ?

Toutes les opérations de tranche sur un objet dictionnaire donneront lieu à cette erreur . Un dictionnaire Python est un type hachable et ne prend pas en charge le découpage en tranches comme les autres types de données séquentielles.

Regardons l'exemple suivant :

myCompany = {
            'employee1':{'name':'Adam', 'ID':230001, 'role':'Developer'},
            'employee2':{'name':'Mike', 'ID':230002, 'role':'Developer'},
            'employee3':{'name':'Joe', 'ID':230003, 'role':'Developer'},
            'employee4':{'name':'Chris', 'ID':230004, 'role':'Developer'},
            'employee5':{'name':'Frank', 'ID':230005, 'role':'Developer'}
            }
 
showEmployee = myCompany[:3]
print(showEmployee)

Production

type non hachable : 'tranche'

type non hachable : 'tranche'

La solution

En utilisant la print()déclaration et les clés du dictionnaire, nous pouvons afficher le contenu du dictionnaire.

myCompany = {
            'employee1':{'name':'Adam', 'ID':230001, 'role':'Developer'},
            'employee2':{'name':'Mike', 'ID':230002, 'role':'Developer'},
            'employee3':{'name':'Joe', 'ID':230003, 'role':'Developer'},
            'employee4':{'name':'Chris', 'ID':230004, 'role':'Developer'},
            'employee5':{'name':'Frank', 'ID':230005, 'role':'Developer'}
            }
 
print("Employee 1 " + myCompany["employee1"])
print("Employee 2 " + myCompany["employee2"])
print("Employee 3" + myCompany["employee3"])

TypeError : Type non hachable : "tranche" pour les cadres de données Pandas

Le code ci-dessous montre comment nous pouvons imprimer un sous-ensemble de lignes dans une trame de données pandas.

print(sample_data[25:150, :])
print(sample_data[100:300, :].shape)

Sortie d'erreur

TypeError: unhashable type: 'slice'

La solution

.iloc()La fonction permet l'indexation dans les trames de données pandas. .iloc()La fonction est similaire à l'indexation normale, sauf que ses indices sont basés sur la position.

print(sample_data.iloc[25:1150, :])
print(sample_data.iloc[100:300, :].shape)

TypeError : Type non hachable : 'slice' pour JSON

Référons-nous à l'implémentation suivante. Une requête API est envoyée, les données sont récupérées au format JSON.

import requests
import json
 
req = requests.get('http://sampleAPI.net/sample)
date = json.loads(req.text)
data = req.json()
 
for i in data['myItem'][:3]:
  res = i['attribute']
  print(res)

Production

TypeError: unhashable type: 'slice' error

La solution

myItemsemble être de type Dictionnaire. Par conséquent, toute tentative d'indexation lèvera l'exception. Il vaut mieux utiliser la .items()fonction.

import requests
import json
 
req = requests.get('http://sampleAPI.net/sample)
date = json.loads(req.text)
data = req.json()
 
for i in data(['myItem'].items())[:3]:
  res = i['attribute']
  print(res)

TypeError : Type non hachable : "tranche" pour le module Beautiful Soupe

Le BeautifulSoup module est utilisé pour récupérer des données Web à partir de sources HTML et XML. Examinons l'implémentation suivante qui récupère les données textuelles d'un site Web.

import requests
from bs4 import BeautifulSoup
 
r = requests.get('https://samplewebsite.com/samplePage01')
soup = BeautifulSoup(r.text, 'html.parser')
results = soup.find_all('td', attrs={'valign':'top'})
 
records = []
for result in results:
    name = result.contents[0][0:-1]

Production

TypeError: unhashable type: 'slice' error

La solution

.contentsse composent d'objets balises. Par conséquent, une exception est levée lors de l'accès à un dictionnaire d'attributs de balise.

De plus, utiliser .stringsvous permet de récupérer uniquement NavigableStringdes données.

for result in results:
    name = list(result.strings)[0][0:-1]

TypeError : Type non hachable res = cache.get(item)

Examinons l'implémentation suivante pour un modèle "Forêt aléatoire".

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.metrics import confusion_matrix
import sklearn
import sklearn.datasets
import sklearn.ensemble
import numpy as np
import lime
import lime.lime_tabular
 
class Randomforest:
 
    def __init__(self):
        self.trained_model = None
        self.clf = None
        pass
 
...
...
...
...
 
    rf = Randomforest()
 
...
...
...
...
 
    dataset = pd.read_csv("filename.csv")
 
    train_x, test_x, train_y, test_y = rf.split_dataset(dataset, 0.7, Headers[1:-1], Headers[-1])
 
    trained_model = rf.random_forest_classifier(train_x, train_y)
 
    predictions = trained_model.predict(test_x)
 
    feature_names = Headers[1:-1]
 
    class_names = ['1', '0']
 
    explainer = lime.lime_tabular.LimeTabularExplainer(train_x, feature_names= feature_names, class_names=class_names,
                                                   categorical_features= None, categorical_names=None, discretize_continuous=True,
                                                   kernel_width=3)

Production

TypeError: Unhashable Type

La solution

Nous transmettons les données d'apprentissage ( train_x) dans le modèle en tant que pandastrame de données. Les pandas n'autorisent pas les opérations de découpage sur les trames de données. Par conséquent, passez train_xpour train_x.values.

FAQ sur TypeError : Type non hachable : 'slice'

Comment les erreurs de type sont-elles causées ?

TypeErrors est l'un des nombreux types d'exceptions de Python. Les opérations effectuées sur des types d'objets non pris en charge provoquent l'erreur. Les causes courantes des TypeErrors sont :

Opération non prise en charge entre deux types
Type d'index de liste incorrect
Appel d'un identifiant non appelable
Itération via un identifiant non itératif

Quels sont les objets découpables ?

Les objets découpables en Python incluent :

– Chaînes
– Octets
Tuples
– Listes
Un objet découpable doit prendre en charge l'indexation. Les types de données hachables ne sont pas trancheables.

Conclusion

L'indexation sur les types de dictionnaires et d'autres types de données hachables génère l'erreur.

Les principales raisons TypeErrorssont :

  1. Opération non prise en charge entre deux types
  2. Le type incorrect d'index de liste
  3. Appel d'un identifiant non appelable
  4. Itération à travers un identifiant non itératif

Un moyen plus pratique d'accéder aux éléments du dictionnaire consiste à fournir la valeur de la clé. Une itération peut être fournie pour accéder à plusieurs éléments de dictionnaire à la fois.

Par conséquent, nous avons démontré divers cas où l'erreur peut se produire.

Source :  https://www.pythonpool.com

#python 

Luz  Runolfsson

Luz Runolfsson

1600884780

Python Slice: How to Use slice() Method in Python

The slice object is used to slice the given sequences like string, bytes, tuple, list, range or any object which supports the sequence protocol ( which implements getitem() and len() method).

Python Slice Example

Python slice() is an inbuilt function that creates the slice object representing the set of indices specified by range(start, stop, step). The slice object is used to determine how to slice the sequence. You can specify where to start the slicing, and where to end.  You can also determine the step, which allows you to, e.g., slice only every other item.

Syntax

The syntax of the Python slice() function is the following.

slice(stop)
slice(start, stop, step)

#python #python slice

Luz  Runolfsson

Luz Runolfsson

1600436700

Python Slice Notation: What is Slice Notation in Python

Slicing is used to retrieve the subset of values. The basic slicing technique is to define a starting point, the stopping point, and the step size – also known as a stride. In this tutorial, we will see the Python slice notation, and how to use it effectively.

Python Slice Notation

Python slice() is an inbuilt constructor that creates the slice object representing the set of indices specified by range(start, stop, step). If you want to get specific list values specified by range then Python slice() is the solution.

First, we will create a  list of values.

## app.py

A = list(range(2,10,2))
B = list(range(9))

print("List A:",A)
print("List B:",B)

#python #python slice

Python Programming 25 - Reverse List with Slice

Python is a widely popular programming language. In this episode we are going to talk about Reverse List with Slice! This more advanced Python Programming series is going to help you continue to build your skills in Python!
Python code https://github.com/CalebCurry/python

#programming #python #reverse list #slice

saba techatom

1652439424

Python TypeError: slice indices must be integers or None

Are you facing the same issue then you can check out python type error slice indices must be integers or None or have an __index__ method Solution and solve it now.it is very common error faced by the programmers

#python #Python #error