I've done quite a bit of research and thinking about this, and these are my current thoughts (subject to change tomorrow
). If you look at the crime data, the second best approach to surviving a violent attack is active compliance. The best way is using an effective weapon correctly. About the worse way is to use an ineffective weapon.
So, we need to ask, what is an effective weapon? It is one that will physically stop an attacker NOW. Also, we need to ask ourselves how do we use the weapon correctly. This means we need to be trained and practiced to the point that we can wield it properly. So, here's the list of weapons that we could use, and the pros and cons.
Gun - if it's on you, loaded and you've actually trained with it (drawing, firing, retention, etc) this is the most effective weapon for self defense. If you aren't proficient, this goes into the category of non-effective weapon which is worse than compliance.
Knife - well, the spectrum varies from tiny to huge, but let's assume we are talking about 3.5" folders. These are not effective weapons for self defense without SERIOUS training which I don't know where most people would find some. You can stab someone multiple times and they may die 30 minutes later, but that's not effective. I carry a tiny little folder a lot, but it's for utility. I would not count on it for protection as it's inadequate and I'm not trained (although I've done years of martial arts).
Sprays - the problem with these is that they are not guaranteed to stop someone and are very hard to practice with. I'm not a police officer, and I don't have the authority to use force for compliance. Again, the above applies here - not effective unless well trained, and even then, not great.
Stick (cane, etc) - this is probably the most realistic weapon that I would carry for defense other than a gun. I know how to use one and it can be used for many other things. When I go on walks, I may carry a medium sized metal flashlight.
So, what do I do about non-lethal threats like a dog running up to me (which is probably the one realistic non-lethal threat I can think of)? Well, I've come to the conclusion that if the situation isn't life-threatening for me, I can probably deal with it with a flashlight or something else I have on me or with my hand/legs. This isn't like some crazy martial arts thing (since I mentioned that earlier) this is like walking away, pushing someone, etc. Whatever it takes to create distance and break contact. I've come to the conclusion that if you are presented with a threat that you can't deal with unarmed, then it's very much a life-threatening problem. Please correct me if I've missed something here.
I'm a guy, in reasonably good shape, and that's just my opinion. For someone else, this may not be right, but I would ask that we all realistically ask ourselves what the purpose of each item is, if we could realistically use it, and if so, would it be effective at resolving the situation.