﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
33295	AttributeError is raised when a list is passed into self.stdout.write().	Vishal Pandey	Vishal Pandey	"
We pretty much know and understand that only a string could be passed in self.stdout.write function
Just in case if we pass a list into it, like the below piece of code:
{{{
class Command(BaseCommand):
    def handle(self, *args, **kwargs):
        self.stdout.write([1,2,3])
}}}

It throws an Attribute error stating that list' object has no attribute 'endswith', it is because the datatype of msg is not checked in handle function while writing write method in Outputwrapper class. 

Here is the full traceback of the error
{{{
Traceback (most recent call last):
  File ""manage.py"", line 22, in <module>
    main()
  File ""manage.py"", line 18, in main
    execute_from_command_line(sys.argv)
  File ""/home/vishal/.local/lib/python3.8/site-packages/django/core/management/__init__.py"", line 401, in execute_from_command_line
    utility.execute()
  File ""/home/vishal/.local/lib/python3.8/site-packages/django/core/management/__init__.py"", line 395, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File ""/home/vishal/.local/lib/python3.8/site-packages/django/core/management/base.py"", line 330, in run_from_argv
    self.execute(*args, **cmd_options)
  File ""/home/vishal/.local/lib/python3.8/site-packages/django/core/management/base.py"", line 371, in execute
    output = self.handle(*args, **options)
  File ""/home/vishal/Desktop/open_source/leetcode_companywise/questions/management/commands/addcompanies.py"", line 18, in handle
    self.stdout.write([1,2,3])
  File ""/home/vishal/.local/lib/python3.8/site-packages/django/core/management/base.py"", line 144, in write
    if ending and not msg.endswith(ending):
AttributeError: 'list' object has no attribute 'endswith'
}}}

It can be fixed if we just ensure the datatype of the msg is string  and handle it accordingly with 
{{{
isinstance(msg, str) 
}}}
in line 151 of /django/core/management/base.py.

After handling this error a proper error message(i.e. TypeError) will be shown on the terminal of the user which is more appropriate in this situation.

New traceback: 

{{{
Traceback (most recent call last):
  File ""manage.py"", line 22, in <module>
    main()
  File ""manage.py"", line 18, in main
    execute_from_command_line(sys.argv)
  File ""/home/vishal/.local/lib/python3.8/site-packages/django/core/management/__init__.py"", line 401, in execute_from_command_line
    utility.execute()
  File ""/home/vishal/.local/lib/python3.8/site-packages/django/core/management/__init__.py"", line 395, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File ""/home/vishal/.local/lib/python3.8/site-packages/django/core/management/base.py"", line 330, in run_from_argv
    self.execute(*args, **cmd_options)
  File ""/home/vishal/.local/lib/python3.8/site-packages/django/core/management/base.py"", line 371, in execute
    output = self.handle(*args, **options)
  File ""/home/vishal/Desktop/open_source/leetcode_companywise/questions/management/commands/addcompanies.py"", line 18, in handle
    self.stdout.write([1,2,3])
  File ""/home/vishal/.local/lib/python3.8/site-packages/django/core/management/base.py"", line 147, in write
    self._out.write(style_func(msg))
TypeError: write() argument must be str, not list
}}}

"	Bug	closed	Core (Management commands)	3.2	Normal	wontfix			Unreviewed	0	0	0	0	1	0
