Don't try to upload coverage on builds which don't produce coverage
diff --git a/.travis.yml b/.travis.yml
index 8ad514f..b8206e0 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -120,7 +120,7 @@
     - ./.travis/run.sh
 
 after_success:
-    - source ~/.venv/bin/activate && bash <(curl -s https://codecov.io/bash) -e TRAVIS_OS_NAME,TOXENV,OPENSSL
+    - ./.travis/upload_coverage.sh
 
 notifications:
     irc:
diff --git a/.travis/upload_coverage.sh b/.travis/upload_coverage.sh
new file mode 100755
index 0000000..554116f
--- /dev/null
+++ b/.travis/upload_coverage.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+set -e
+set -x
+
+NO_COVERAGE_TOXENVS=(pypy pypy3 pep8 py3pep8 docs)
+if ! [[ "${NO_COVERAGE_TOXENVS[*]}" =~ "${TOXENV}" ]]; then
+    source ~/.venv/bin/activate
+    bash <(curl -s https://codecov.io/bash) -e TRAVIS_OS_NAME,TOXENV,OPENSSL
+fi