Yaml.load_all: "TypeError: list indices must be integers, not st

Fermé
ahmadou_20 - 14 juil. 2015 à 16:50
 Utilisateur anonyme - 15 juil. 2015 à 09:22
Bonjour,

J'ai le fichier yaml suivant que je veux parser en utilisant yaml.load_all:


Version: 1
TxnCode: MPT
MessageID: "FFH-18544-1388620740-795905"
Recommendations:
- {ReqSegFlightRef: [[1,2]],TotalPriceRef: 1,PriceInfoRef: 1}
- {ReqSegFlightRef: [[3,4,2]],TotalPriceRef: 2,PriceInfoRef: 2}
- {ReqSegFlightRef: [[5,4,2]],TotalPriceRef: 3,PriceInfoRef: 3}
Flights:
- {OpCarrier: SN,MktCarrier: SN,FlightNb: 2902,DptDate: "0109",DptTime: "09:30",ArrTime: "11:05",DptAirport: VIE,ArrAirport: BRU}
- {OpCarrier: SN,MktCarrier: SN,FlightNb: 243,DptDate: "0109",DptTime: "12:15",ArrTime: "17:00",DptAirport: BRU,ArrAirport: FNA}
- {OpCarrier: OS,MktCarrier: LH,FlightNb: 6325,DptDate: "0109",DptTime: "06:30",ArrTime: "07:35",DptAirport: VIE,ArrAirport: MUC}
Prices:
- {TotalPrice: 1574.14,BaseAmount: 1368.00,TotalTaxe: 206.14,TotalSurcharge: 0.00,TotalFee: 0.00}
- {TotalPrice: 1633.57,BaseAmount: 1368.00,TotalTaxe: 265.57,TotalSurcharge: 0.00,TotalFee: 0.00}
- {TotalPrice: 1636.57,BaseAmount: 1368.00,TotalTaxe: 268.57,TotalSurcharge: 0.00,TotalFee: 0.00}
LFSDetails: |
PriceInfos:
- {FaresRef: [1,2],Price: {Total: 1574.14},Amount: {Total: 1368.00},Taxes: {Total: 206.14},Surcharges: {Total: 0.00},Fees: {Total: 0.00}}
- {FaresRef: [3,4,2],Price: {Total: 1633.57},Amount: {Total: 1368.00},Taxes: {Total: 265.57},Surcharges: {Total: 0.00},Fees: {Total: 0.00}}
- {FaresRef: [3,4,2],Price: {Total: 1636.57},Amount: {Total: 1368.00},Taxes: {Total: 268.57},Surcharges: {Total: 0.00},Fees: {Total: 0.00}}
ListCabinRequested: []
FareInfo:
- {RBD: M,FareBasis: BFFOWAT,PTC: ADT,BreakPointId: N,Availability: 9,Cabin: W,FareType: OB}
- {RBD: B,FareBasis: BFFOWAT,PTC: ADT,BreakPointId: Y,Availability: 9,Cabin: W,FareType: OB}
- {RBD: B,FareBasis: BFFOWAT,PTC: ADT,BreakPointId: N,Availability: 9,Cabin: M,FareType: OB}
Currency: EUR


J'ai le code suivant mais en essayant de l'exécuter j'ai eu l'erreur "TypeError: list indices must be integers, not str" et je n'ai pas compris comment faire pourl'éviter !


def yaml_load_all(iStream,iCodeFilter=None):
for ayamldoc in yaml.load_all(iStream):
lfsWrapper = LFSWrapper(iCodeFilter)
lfsDetails = ayamldoc['LFSDetails'] #line 20
if lfsDetails is not None:
ayamldoc['LFSDetails'] = yaml.load(lfsDetails)
lfsWrapper.loadDict(ayamldoc)
if lfsWrapper.isValid():
yield lfsWrapper


Je pense que je suis entrain de rater un aspect fondamental concerant la structure des données et la facon dont yaml.load_all fonctionne!

J'esperais avoir un peu d'aide ici! Auriez-vous des idées?

Merci de votre aide!!

1 réponse

Utilisateur anonyme
15 juil. 2015 à 09:22
C'est assez bête mais ... affiche ta liste pour voir ce qu'elle contient. S'il y a des strings, voit si c'est normal. Après ça peut être aussi des nombres au format string et dans ce cas, il te suffit de les convertir en integer
int("32") = 32
0