Hi Saidov,

I'm going to reply to your post inline, as that is the etiquette here and in many technical mailing lists.

On 21May2016 13:34, Saidov <usai...@gmail.com> wrote:
I am working on a piece of python code that's supposed to help me manage a
budget:
1. Read a banking statement
2. Categorize expenses and income by month and by type
3. Print out a report comparing the projected expenses/income with actual
numbers.

Thank you for providing your problem's context.

*File characteristics:*
Banking statement in a csv file format.
contents: 5 columns, 1st column= date, 4 column=expenses
date format: mm/dd/yyyy, type: string
expenses format: ($0.00), type: string
income format: $0.00, type: string

*Python Version: 3.5 (64 bit)*
IDE:Microsoft Visual Studio Community 2015
Version 14.0.25123.00 Update 2

Python Tools for Visual Studio   2.2.40315.00
Python Tools for Visual Studio provides IntelliSense, projects, templates,
Interactive windows, and other support for Python developers.

And this level of detail is very welcome.

*Problem:*
I want to convert expense/income values into a decimal form so I could sum
them into appropriate buckets according to the month in which they occur. I
am getting the following error message when I run my code:

"decimal.InvalidOperation was unhandled by user code
Message: [<class 'decimal.ConversionSyntax'>]"

Please always provide the full traceback which accompanied the exception report; there should be a list of code lines indicating the call stack where the error occurred. This provides valuable context for figuring out where in your code to look for issues.

Absent that context, I will have a guess at where this might be occurring:

[...]
files =['export.csv']
with open("budgetfile.csv","wt") as fw:
   writer = csv.writer(fw)
   for file in files:
       with open(file) as csvfile:
           records = csv.reader(csvfile, quoting=csv.QUOTE_NONE)
[...]
           for row in records:
[...]
               try:
                   expenses[ts.Date(row[0]).month] += decimal.Decimal(row[4])
               except ValueError:
                   pass

I would guess that this:

 decimal.Decimal(row[4])

is the source of your error; it seems to be the only place where you actually convert a string into a Decimal. I would guess that when handed a bad string this raises decimal.ConversionSyntax instead of a ValueError.

I suggest that you print out the value of row[4] before the "try" statement:

 print("row[4] =", repr(row[4]))

Note the use of repr: it gets you better detail about the value of the string.

Thank you for a well presented question.

Finally, please try to post in plain text instead of rich text; this is a plain text list and if you post in rich text or HTML (a) some hinting you have have povided like coloured text will not be presented to readers and (b) some things, particularly code, and be presented visually mangled, which makes things hard to read and debug.

Cheers,
Cameron Simpson <c...@zip.com.au>
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to