2016-04-11 13 views
-2

Programlama ödeviyle ilgili bir ödevim var. Try/Except kullanarak bir soruna ulaşana kadar her şey sorunsuz geçti. Geçerli bir tarih yazacak olursak, program onu ​​alır ve devam eder, ancak geçerli bir tarih-saat formatı kullanırsam istisna tepki vermez. İşte Datetime modülü - ValueError try/except çalışmaz python 3

benim kodudur:

import datetime 
import csv 


def get_stock_name(prompt,mode): 
    while True: 
     try: 
      return open(input(prompt) + ".csv") 
     except FileNotFoundError: 
      print("File not found. Please try again.") 
     except IOError: 
      print("There was an IOError opening the file. Please try again.") 


def get_stock_date(prompt): 
    while True: 
     try: 
      return (input(prompt)) 
     except TypeError: 
      print("Try again.") 
     except ValueError: 
      print("Try again.") 


def get_stock_purchased(prompt): 
    while True: 
     try: 
      return (input(prompt)) 
     except ValueError: 
      print("Try again.") 
     except TypeError: 
      print("try again.") 


stock_name = get_stock_name("Enter the name of the file ==> ", "w") 

stock_date = datetime.datetime.strptime(get_stock_date("Enter the stock purchase date ==> " , "%m/%d/%Y")) 

stock_sold = datetime.datetime.strptime(get_stock_date("Enter the date you sold the stock ==>" , "%m/%d/%Y")) 

stock_purchased = get_stock_purchased("How many stocks were purchased on start date ==>") 
+0

Python 2. kullanıyorsanız

Son olarak, nasıl bir 'TypeError' veya' ValueError' yaptığınızı tüm ise 'girişi()' olabileceğini raw_input kullanmanız gerekecektir? Ve eğer başarılı olursa, işlevi durdurur. Bence 'while', 'return' ve muhtemelen 'break''e bir göz atmanız gerekiyor. Oh, ve aynı zamanda özyineleme. Ve referansları kaydetme. – TigerhawkT3

+0

Python 2'de istisna kaldırıldı mı? Ne giriyorsun? – tdelaney

+0

@ TigerhawkT3 Teşekkürler! Ve ben onunla dalga geçerken, bana iki farklı hata verdi (TypeError ve ValueError) Bu yüzden iki istisna yaptım. – tokyolerd

cevap

0

Tigerhawk başlangıçtaki yorumunu netleştirmek için: Bunu düşünmek

import datetime 
def get_stock_date(prompt): 
    while True: 
     d = input(prompt) 
     try: 
      d = datetime.datetime.strptime(d, "%m/%d/%Y") 
     except (ValueError, TypeError): 
      print("Try again.") 
     else: 
      return d 

stock_date = get_stock_date("Enter the stock purchase date ==> ") 
0

Şu anda (tıpkı hemen işlevini sonlandırmak ve ben başımın üstü kapalı aklınıza gelebilecek herhangi bir durumda olduğunu istisnaları bir dize döndürür bir döngü var Bahsedilen), yanlış sayıda argüman ile strptime çağrı ve yanlış argüman sayısı ile fonksiyonunuzu tekrarlayan bir çağrı olacak sanmıyorum. Ve asla hiçbir zaman anlamlı bir değer kaydetmezsiniz. Belki de özyinelemeli arama sadece yanlış girinti var? Neyse, bunu en az mantıklı olarak tamamen kodunuzu yeniden gerekecek:

def get_stock_date(prompt): 
    try: 
     stock_date = datetime.datetime.strptime(prompt, "%m/%d/%Y") 
     return(stock_date) 
    except: 
     print("Try Again.") 
     prompt = input("Enter the stock purchase date ==> ") 
     get_stock_date(prompt) 

get_stock_date(input("Enter the stock purchase date ==> ")) 
+0

Teşekkürler! Açıklaman biraz kafam karıştı, ama James daha net yaptı. – tokyolerd

-1

Aradığınız şudur: tryError veya ValueError işlemek için try-catch işleminin yapılması için girişi try deyimine datetime olarak göndermeniz gerekir.

import datetime 

def get_stock_date(prompt): 
    while True: 
    try: 
     return datetime.datetime.strptime(input(prompt), "%m/%d/%Y") 
    except (ValueError, TypeError): 
     print("Try again.") 

stock_date = get_stock_date("Enter the stock purchase date ==> ") 

Ayrıca, başlangıçtaki sonrası size karışıklığa neden olan get_stock_date için yinelemeli çağrı yapıyor gibi görünmesine neden garip girinti vardı. Eğer

+0

Başarısız olan "prompt" komutunu dönüştürüyorsunuz ve ardından çıplak bir 'input()' çağrısı ile yeni bir değer elde ediyorsunuz ("Stok alımını girin ..." istemi olmadan). – TigerhawkT3

+0

Teşekkürler. Evet, bu fikriydi. Kullanıcının geçerli bir değer girmesini istemek istedim. – Shobeir