ce trebuie reparat pentru a rezolva TypeError: este necesar un număr întreg (a primit tipul str) [duplicat] (Programare, Python, Python 3.X, Python 2.7)

Bouramtane Tarik a intrebat.
a intrebat.

Am o problemă cu alegerea anilor de calcul.

python flux2nc.py ../data/output/fluxes/ ../data/output/
    IMPORTANT: ../data/output/fluxes/ SHOULD CONTAIN ONLY FLUXES FILES!!!
    Choose output parameter
    1 - Precipitation
    2 - Evapotranspiration
    3 - Runoff
    4 - Base flow
    5 - Snow Water Equivalent
    6 - Soil moisture
    Choose output (1 a 6)>3
    Enter start year:2011
    End year:2012
    Traceback (most recent call last):
      File "flux2nc.py", line 240, in <module>
        main()
      File "flux2nc.py", line 234, in main
        flux2nc(sys.argv[1],sys.argv[2])
      File "flux2nc.py", line 120, in flux2nc
        inidate = dt.date(start_year,1,1)
    TypeError: an integer is required (got type str)

Știu că această problemă este deja pusă, dar nu reușesc să găsesc soluția exactă având în vedere cunoștințele mele limitate despre python, iar scriptul este destul de complicat.

iată partea din codul sursă, legată de întrebarea mea.

# import dependencies
import sys
import os, string
# handle dates...
import datetime as dt
# NetCDF and Numeric
from netCDF4 import *
from numpy import *

    # if the date information is not set get it from user
    if start_year == None:
        # for what date?
        start_year = input("Enter start year:")
    if end_year == None:
        end_year = input("End year:")

    # set date information in datetime object
    inidate = dt.date(start_year,1,1)
    enddate = dt.date(end_year,12,31)

    # calculate number of days in time series
    days = enddate.toordinal() - inidate.toordinal()+1

Comentarii

  • Bună ziua! Având în vedere că pari nou aici, te rog să treci peste cum să întrebi și on-topic. Acest lucru îi va ajuta pe ceilalți să te ajute. Dacă aveți întrebări, oferiți codul dvs. ca un exemplu minim, complet și verificabil. Codificare fericită! –  > Por TwistedSim.
  • Observați că eroarea spune: „este necesar un număr întreg (a primit tipul str)”. Atunci când primiți datele de intrare ale utilizatorului prin intermediul input() primiți un șir de caractere. dt.date necesită numere întregi (a se vedea documentația deci trebuie să convertiți datele de intrare. Această întrebare vă poate fi de ajutor: Cum pot citi intrările ca numere întregi. –  > Por Jeff B.
1 răspunsuri
TwistedSim

Eroarea ta este probabil că ai uitat să faci cast-ul input(...) la int:

start_year = input('Enter start year')
start_year = int(start_year)

ar trebui să faci același lucru pentru end_year și output.

Notă: Este foarte greu să încerc să vă ajut fără codul sursă. Trebuie să deduc o mulțime de lucruri pentru a vă ajuta să diagnosticați această eroare.